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

View File

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

View File

@@ -13,14 +13,10 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.FragmentNavigatorExtras import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.navigation.fragment.findNavController 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.BuildConfig
import com.woka.R import com.woka.R
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
import com.woka.databinding.FragmentSplashBinding import com.woka.databinding.FragmentSplashBinding
import com.woka.googleads.SPLASH
import com.woka.home.views.HomeActivity import com.woka.home.views.HomeActivity
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.onboard.models.appupdate.VersionHistoryResponseData import com.woka.onboard.models.appupdate.VersionHistoryResponseData
@@ -82,36 +78,6 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
} }
clickEvents() 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() { private fun clickEvents() {
@@ -181,7 +147,7 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
userPrefs?.skippedVersion?.let {skippedVersion -> userPrefs?.skippedVersion?.let {skippedVersion ->
if (newVersion > skippedVersion){ if (newVersion > skippedVersion){
it.data.`0`.force_update_version?.let { forceVersion -> it.data.`0`.force_update_version?.let { forceVersion ->
findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToNewUpdateFragment(newVersion, 1)) findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToNewUpdateFragment(newVersion, forceVersion))
return@observe 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_GUEST_LOGIN = "guest_login_android"
const val ANALYTICS_USER_SIGN_UP = "user_signup_android" const val ANALYTICS_USER_SIGN_UP = "user_signup_android"
const val ANALYTICS_NEW_USER = "new_user_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.google.services
classpath libs.gradle classpath libs.gradle
classpath libs.perf.plugin 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. }// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {

View File

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

View File

@@ -40,6 +40,8 @@ sdpAndroid = "1.1.1"
shimmer = "0.5.0" shimmer = "0.5.0"
sspAndroid = "1.1.1" sspAndroid = "1.1.1"
workRuntimeKtx = "2.9.1" workRuntimeKtx = "2.9.1"
firebaseCrashlytics = "19.2.0"
firebaseCrashlyticsGradle = "3.0.2"
[libraries] [libraries]
android_audio_mixer = { module = "com.github.ZeroOneZeroR:android_audio_mixer", version.ref = "android_audio_mixer" } 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" } sdp-android = { module = "com.intuit.sdp:sdp-android", version.ref = "sdpAndroid" }
shimmer = { module = "com.facebook.shimmer:shimmer", version.ref = "shimmer" } shimmer = { module = "com.facebook.shimmer:shimmer", version.ref = "shimmer" }
ssp-android = { module = "com.intuit.ssp:ssp-android", version.ref = "sspAndroid" } 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] [plugins]
androidApplication = { id = "com.android.application", version.ref = "agp" } androidApplication = { id = "com.android.application", version.ref = "agp" }