앱스플라이어
- sdk 추가 - 딥링크 & 디퍼드 딥링크에서 값 받아와서 SharedPreference에 저장 - test applink, test urischeme 설정
This commit is contained in:
		| @@ -175,4 +175,7 @@ dependencies { | ||||
|  | ||||
|     // Facebook | ||||
|     implementation "com.facebook.android:facebook-core:18.0.0" | ||||
|  | ||||
|     // Appsflyer | ||||
|     implementation 'com.appsflyer:af-android-sdk:6.16.1' | ||||
| } | ||||
|   | ||||
| @@ -54,8 +54,8 @@ | ||||
|     <application | ||||
|         android:name=".app.SodaLiveApp" | ||||
|         android:allowBackup="true" | ||||
|         android:dataExtractionRules="@xml/data_extraction_rules" | ||||
|         android:fullBackupContent="@xml/backup_rules" | ||||
|         android:dataExtractionRules="@xml/appsflyer_data_extraction_rules" | ||||
|         android:fullBackupContent="@xml/appsflyer_backup_rules" | ||||
|         android:hardwareAccelerated="true" | ||||
|         android:icon="@mipmap/ic_launcher" | ||||
|         android:label="@string/app_name" | ||||
| @@ -79,10 +79,17 @@ | ||||
|                 <category android:name="android.intent.category.DEFAULT" /> | ||||
|                 <category android:name="android.intent.category.BROWSABLE" /> | ||||
|  | ||||
|                 <data android:scheme="http" /> | ||||
|                 <data android:scheme="https" /> | ||||
|                 <data android:host="sodalive.page.link" /> | ||||
|                 <data android:host="sodalive.net" /> | ||||
|                 <data | ||||
|                     android:host="voiceon-test.onelink.me" | ||||
|                     android:scheme="https" /> | ||||
|             </intent-filter> | ||||
|             <intent-filter> | ||||
|                 <action android:name="android.intent.action.VIEW" /> | ||||
|  | ||||
|                 <category android:name="android.intent.category.DEFAULT" /> | ||||
|                 <category android:name="android.intent.category.BROWSABLE" /> | ||||
|  | ||||
|                 <data android:scheme="voiceon-test" /> | ||||
|             </intent-filter> | ||||
|         </activity> | ||||
|         <activity android:name=".main.MainActivity" /> | ||||
|   | ||||
| @@ -5,6 +5,8 @@ import android.content.pm.ApplicationInfo | ||||
| import android.content.pm.PackageManager | ||||
| import android.os.Build | ||||
| import androidx.appcompat.app.AppCompatDelegate | ||||
| import com.appsflyer.AppsFlyerLib | ||||
| import com.appsflyer.deeplink.DeepLinkResult | ||||
| import com.facebook.FacebookSdk | ||||
| import com.orhanobut.logger.AndroidLogAdapter | ||||
| import com.orhanobut.logger.Logger | ||||
| @@ -32,6 +34,8 @@ class SodaLiveApp : Application() { | ||||
|         ImageLoaderProvider.init(applicationContext) | ||||
|  | ||||
|         FacebookSdk.fullyInitialize() | ||||
|  | ||||
|         setupAppsFlyer() | ||||
|     } | ||||
|  | ||||
|     private fun isDebuggable(): Boolean { | ||||
| @@ -53,4 +57,50 @@ class SodaLiveApp : Application() { | ||||
|  | ||||
|         return debuggable | ||||
|     } | ||||
|  | ||||
|     private fun setupAppsFlyer() { | ||||
|         clearDeferredDeepLink() | ||||
|  | ||||
|         // Appsflyer SDK 초기화 | ||||
|         AppsFlyerLib.getInstance().init("tWF2wbJ5nSkya5Ru9mGcPU", null, this) | ||||
|         AppsFlyerLib.getInstance().start(this) | ||||
|  | ||||
|         // 딥링크 및 디퍼드 딥링크 처리 | ||||
|         AppsFlyerLib.getInstance().subscribeForDeepLink { deepLinkResult -> | ||||
|             when (deepLinkResult.status) { | ||||
|                 DeepLinkResult.Status.FOUND -> { | ||||
|                     val deepLink = deepLinkResult.deepLink | ||||
|                     SharedPreferenceManager.marketingLinkValue = deepLink?.getStringValue( | ||||
|                         "deep_link_value" | ||||
|                     ) ?: "" | ||||
|                     SharedPreferenceManager.marketingPid = deepLink?.getStringValue( | ||||
|                         "deep_link_sub1" | ||||
|                     ) ?: "" | ||||
|                     SharedPreferenceManager.marketingUtmSource = deepLink?.getStringValue( | ||||
|                         "deep_link_sub2" | ||||
|                     ) ?: "" | ||||
|                     SharedPreferenceManager.marketingUtmMedium = deepLink?.getStringValue( | ||||
|                         "deep_link_sub3" | ||||
|                     ) ?: "" | ||||
|                     SharedPreferenceManager.marketingUtmCampaign = deepLink?.getStringValue( | ||||
|                         "deep_link_sub4" | ||||
|                     ) ?: "" | ||||
|                     SharedPreferenceManager.marketingLinkValueId = deepLink?.getStringValue( | ||||
|                         "deep_link_sub5" | ||||
|                     )?.toLongOrNull() ?: 0L | ||||
|                 } | ||||
|  | ||||
|                 DeepLinkResult.Status.NOT_FOUND -> Logger.d("딥링크를 찾을 수 없습니다.") | ||||
|                 DeepLinkResult.Status.ERROR -> Logger.d("딥링크 처리 중 오류 발생: ${deepLinkResult.error}") | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private fun clearDeferredDeepLink() { | ||||
|         SharedPreferenceManager.marketingUtmSource = "" | ||||
|         SharedPreferenceManager.marketingUtmMedium = "" | ||||
|         SharedPreferenceManager.marketingUtmCampaign = "" | ||||
|         SharedPreferenceManager.marketingLinkValue = "" | ||||
|         SharedPreferenceManager.marketingLinkValueId = 0 | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -20,6 +20,13 @@ object Constants { | ||||
|     const val PREF_NOT_SHOWING_EVENT_POPUP_ID = "pref_not_showing_event_popup_id" | ||||
|     const val PREF_IS_VIEWED_ON_BOARDING_TUTORIAL = "pref_is_viewed_on_boarding_tutorial" | ||||
|  | ||||
|     const val PREF_MARKETING_PID = "pref_marketing_pid" | ||||
|     const val PREF_MARKETING_UTM_SOURCE = "pref_marketing_utm_source" | ||||
|     const val PREF_MARKETING_UTM_MEDIUM = "pref_marketing_utm_medium" | ||||
|     const val PREF_MARKETING_UTM_CAMPAIGN = "pref_marketing_utm_campaign" | ||||
|     const val PREF_MARKETING_LINK_VALUE = "pref_marketing_link_value" | ||||
|     const val PREF_MARKETING_LINK_VALUE_ID = "pref_marketing_link_value_id" | ||||
|  | ||||
|     const val EXTRA_CAN = "extra_can" | ||||
|     const val EXTRA_DATA = "extra_data" | ||||
|     const val EXTRA_TERMS = "extra_terms" | ||||
|   | ||||
| @@ -174,4 +174,40 @@ object SharedPreferenceManager { | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_IS_PLAYER_SERVICE_RUNNING] = value | ||||
|         } | ||||
|  | ||||
|     var marketingPid: String | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_PID] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_PID] = value | ||||
|         } | ||||
|  | ||||
|     var marketingUtmSource: String | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_UTM_SOURCE] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_UTM_SOURCE] = value | ||||
|         } | ||||
|  | ||||
|     var marketingUtmMedium: String | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_UTM_MEDIUM] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_UTM_MEDIUM] = value | ||||
|         } | ||||
|  | ||||
|     var marketingUtmCampaign: String | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_UTM_CAMPAIGN] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_UTM_CAMPAIGN] = value | ||||
|         } | ||||
|  | ||||
|     var marketingLinkValue: String | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_LINK_VALUE] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_LINK_VALUE] = value | ||||
|         } | ||||
|  | ||||
|     var marketingLinkValueId: Long | ||||
|         get() = sharedPreferences[Constants.PREF_MARKETING_LINK_VALUE_ID, 0L] | ||||
|         set(value) { | ||||
|             sharedPreferences[Constants.PREF_MARKETING_LINK_VALUE_ID] = value | ||||
|         } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user