Merge pull request #3151 from omnivore-app/fix/android-intercom-hash

fix/android intercom hash
This commit is contained in:
Jackson Harper
2023-11-21 12:44:11 +08:00
committed by GitHub
9 changed files with 32 additions and 7 deletions

View File

@ -17,8 +17,8 @@ android {
applicationId "app.omnivore.omnivore"
minSdk 26
targetSdk 33
versionCode 146
versionName "0.0.146"
versionCode 152
versionName "0.0.152"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {

View File

@ -3,6 +3,7 @@ query Viewer {
id
name
isFullUser
intercomHash
profile {
id
username

View File

@ -24,9 +24,12 @@ class EventTracker @Inject constructor(val app: Context) {
PostHog.setSingletonInstance(posthog)
}
fun registerUser(userID: String) {
fun registerUser(userID: String, intercomHash: String?) {
posthog.identify(userID)
Intercom.client().loginIdentifiedUser(Registration.create().withUserId(userID))
intercomHash?.let { intercomHash ->
Intercom.client().setUserHash(intercomHash)
}
}
fun track(eventName: String, properties: Properties = Properties()) {

View File

@ -13,7 +13,8 @@ suspend fun Networker.viewer(): Viewer? {
userID = me.id,
name = me.name,
username = me.profile.username,
profileImageURL = me.profile.pictureUrl
profileImageURL = me.profile.pictureUrl,
intercomHash = me.intercomHash,
)
} else {
null

View File

@ -13,7 +13,7 @@ import app.omnivore.omnivore.persistence.entities.*
SavedItemAndSavedItemLabelCrossRef::class,
SavedItemAndHighlightCrossRef::class
],
version = 12
version = 15
)
abstract class AppDatabase : RoomDatabase() {
abstract fun viewerDao(): ViewerDao

View File

@ -9,6 +9,7 @@ data class Viewer(
val name: String,
val username: String,
val profileImageURL: String?,
val intercomHash: String?,
)
@Dao

View File

@ -131,7 +131,7 @@ class LoginViewModel @Inject constructor(
viewModelScope.launch {
val viewer = networker.viewer()
viewer?.let {
eventTracker.registerUser(viewer.userID)
eventTracker.registerUser(viewer.userID, viewer.intercomHash)
}
}
}

View File

@ -16,9 +16,12 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewModelScope
import androidx.navigation.NavHostController
import app.omnivore.omnivore.R
import app.omnivore.omnivore.Routes
import app.omnivore.omnivore.networking.Networker
import app.omnivore.omnivore.networking.viewer
import app.omnivore.omnivore.ui.auth.LoginViewModel
import app.omnivore.omnivore.ui.settings.LogoutDialog
import app.omnivore.omnivore.ui.settings.ManageAccountDialog
@ -27,6 +30,7 @@ import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import io.intercom.android.sdk.Intercom
import io.intercom.android.sdk.IntercomSpace
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -106,7 +110,7 @@ fun SettingsViewContent(loginViewModel: LoginViewModel, settingsViewModel: Setti
}
RowDivider()
SettingRow(text = stringResource(R.string.settings_view_setting_row_feedback)) {
Intercom.client().present(space = IntercomSpace.Messages)
settingsViewModel.presentIntercom()
}
RowDivider()
SettingRow(text = stringResource(R.string.settings_view_setting_row_privacy_policy)) {

View File

@ -6,7 +6,10 @@ import app.omnivore.omnivore.DatastoreKeys
import app.omnivore.omnivore.DatastoreRepository
import app.omnivore.omnivore.dataService.DataService
import app.omnivore.omnivore.networking.Networker
import app.omnivore.omnivore.networking.viewer
import dagger.hilt.android.lifecycle.HiltViewModel
import io.intercom.android.sdk.Intercom
import io.intercom.android.sdk.IntercomSpace
import kotlinx.coroutines.launch
import javax.inject.Inject
@ -22,4 +25,16 @@ class SettingsViewModel @Inject constructor(
dataService.clearDatabase()
}
}
fun presentIntercom() {
viewModelScope.launch {
val viewer = networker.viewer()
viewer?.let { viewer ->
viewer?.intercomHash?.let { intercomHash ->
Intercom.client().setUserHash(intercomHash)
}
Intercom.client().present(space = IntercomSpace.Messages)
}
}
}
}