Added crashlytics (Tested).

Solved bug related to empty OneSignal user ID when the app is initially launched.

Tested and shared build for wokeland.com server.
This commit is contained in:
2024-10-14 19:42:38 +05:30
parent ea343e5e41
commit edc269366f
7 changed files with 50 additions and 60 deletions

View File

@@ -6,6 +6,7 @@ plugins {
alias(libs.plugins.ksp)
id 'com.google.gms.google-services'
id 'com.google.firebase.firebase-perf'
id 'com.google.firebase.crashlytics'
}
android {
@@ -119,6 +120,7 @@ dependencies {
// one-signal
implementation(libs.onesignal)
implementation libs.firebase.crashlytics
// room-database
def room_version = "2.6.1"

View File

@@ -6,11 +6,13 @@ import android.transition.TransitionInflater
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.app.ActivityOptionsCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import com.onesignal.OneSignal
import com.onesignal.user.state.IUserStateObserver
import com.onesignal.user.state.UserChangedState
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.database.helpers.ClicksHelper
@@ -20,7 +22,6 @@ import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult
import com.woka.onboard.models.Guest
import com.woka.onboard.mvvm.OnboardRepository
import com.woka.onboard.views.OnboardActivity
import com.woka.userPreference.UserType
import com.woka.utils.ANALYTICS_GUEST_LOGIN
import com.woka.utils.ANALYTICS_NEW_USER
@@ -62,21 +63,18 @@ class LanguageFragment : Fragment() {
lifecycleScope.launch {
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
progressView.show()
when (val response = onboardRepository.guestLogin()){
is ApiResult.Error -> {
progressView.hide()
toast(response.errorMessage)
}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
progressView.hide()
toast(response.message)
requireActivity().changeLocale(LOCALE_ENGLISH)
if (OneSignal.User.onesignalId.isEmpty()){
OneSignal.User.addObserver(object : IUserStateObserver{
override fun onUserStateChange(state: UserChangedState) {
lifecycleScope.launch {
guestLogin()
}
response.data?.let {
completeGuestLogin(response.data)
OneSignal.User.removeObserver(this)
}
}
})
}else{
guestLogin()
}
}
}
@@ -105,6 +103,25 @@ class LanguageFragment : Fragment() {
}
}
private suspend fun guestLogin(){
when (val response = onboardRepository.guestLogin()){
is ApiResult.Error -> {
progressView.hide()
toast(response.errorMessage)
}
is ApiResult.Loading -> {}
is ApiResult.Success -> {
progressView.hide()
toast(response.message)
requireActivity().changeLocale(LOCALE_ENGLISH)
response.data?.let {
completeGuestLogin(response.data)
}
}
}
}
private fun completeGuestLogin(data: Guest) {
userPrefs?.userType = UserType.GUEST
userPrefs?.guestUserName = data.fullname
@@ -123,9 +140,9 @@ class LanguageFragment : Fragment() {
}
}
private fun gotoOnboardActivity() {
startActivity(Intent(requireActivity(), OnboardActivity::class.java),
ActivityOptionsCompat.makeSceneTransitionAnimation(requireActivity(),
binding.logo, "logo").toBundle())
}
// private fun gotoOnboardActivity() {
// startActivity(Intent(requireActivity(), OnboardActivity::class.java),
// ActivityOptionsCompat.makeSceneTransitionAnimation(requireActivity(),
// binding.logo, "logo").toBundle())
// }
}

View File

@@ -13,14 +13,10 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.woka.BuildConfig
import com.woka.R
import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentSplashBinding
import com.woka.googleads.SPLASH
import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
@@ -82,36 +78,6 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
}
clickEvents()
// loadGoogleAds()
}
private fun loadGoogleAds() {
// ad container 1
val adView1 = AdView(requireContext())
adView1.adUnitId = SPLASH
adView1.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer1.removeAllViews()
binding.adsContainer1.addView(adView1)
adView1.loadAd(
AdRequest.Builder()
.build()
)
// ad container 2
val adView2 = AdView(requireContext())
adView2.adUnitId = SPLASH
adView2.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer2.removeAllViews()
binding.adsContainer2.addView(adView2)
adView2.loadAd(
AdRequest.Builder()
.build()
)
}
private fun clickEvents() {
@@ -181,7 +147,7 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
userPrefs?.skippedVersion?.let {skippedVersion ->
if (newVersion > skippedVersion){
it.data.`0`.force_update_version?.let { forceVersion ->
findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToNewUpdateFragment(newVersion, 1))
findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToNewUpdateFragment(newVersion, forceVersion))
return@observe
}
}

View File

@@ -31,4 +31,4 @@ const val ONESIGNAL_APP_ID = "f9674e6f-75fb-49e8-8379-4f2ed2a880b8"
const val ANALYTICS_GUEST_LOGIN = "guest_login_android"
const val ANALYTICS_USER_SIGN_UP = "user_signup_android"
const val ANALYTICS_NEW_USER = "new_user_android"
const val ANALYTICS_UNIQUE_USER = "engaged_users"
const val ANALYTICS_UNIQUE_USER = "engaged_users_android"

View File

@@ -3,6 +3,7 @@ buildscript {
classpath libs.google.services
classpath libs.gradle
classpath libs.perf.plugin
classpath libs.firebase.crashlytics.gradle
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {

View File

@@ -26,14 +26,14 @@ android.enableJetifier=true
# BASE URLS
# staging
# production
WOKA_BASE_URL="https://wokaland.com/secret-panel-10102023/hidden-admin-portal-20092023/api/"
# staging
#WOKA_BASE_URL="https://wokastaging.in/api/"
# testing
#WOKA_BASE_URL="https://wokanative.betadelivery.com/api/"
# production
#WOKA_BASE_URL="https://wokaland.com/api/"
WOKA_USER_NAME="admin"
WOKA_PASSWORD="Woka@1234"

View File

@@ -40,6 +40,8 @@ sdpAndroid = "1.1.1"
shimmer = "0.5.0"
sspAndroid = "1.1.1"
workRuntimeKtx = "2.9.1"
firebaseCrashlytics = "19.2.0"
firebaseCrashlyticsGradle = "3.0.2"
[libraries]
android_audio_mixer = { module = "com.github.ZeroOneZeroR:android_audio_mixer", version.ref = "android_audio_mixer" }
@@ -93,6 +95,8 @@ perf-plugin = { group = "com.google.firebase", name = "perf-plugin", version.ref
sdp-android = { module = "com.intuit.sdp:sdp-android", version.ref = "sdpAndroid" }
shimmer = { module = "com.facebook.shimmer:shimmer", version.ref = "shimmer" }
ssp-android = { module = "com.intuit.ssp:ssp-android", version.ref = "sspAndroid" }
firebase-crashlytics = { group = "com.google.firebase", name = "firebase-crashlytics", version.ref = "firebaseCrashlytics" }
firebase-crashlytics-gradle = { group = "com.google.firebase", name = "firebase-crashlytics-gradle", version.ref = "firebaseCrashlyticsGradle" }
[plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" }