Browse Source

增加kochava归因信息上传

zk 1 year ago
parent
commit
df98c9c196

+ 4 - 1
app/src/main/java/com/atmob/voiceai/data/api/AtmobApi.java

@@ -2,6 +2,7 @@ package com.atmob.voiceai.data.api;
 
 
 import com.atmob.app.lib.base.BaseResponse;
+import com.atmob.voiceai.data.api.request.AttributionRequest;
 import com.atmob.voiceai.data.api.request.BaseRequest;
 import com.atmob.voiceai.data.api.request.CloneDeleteRequest;
 import com.atmob.voiceai.data.api.request.ConfigRequest;
@@ -70,7 +71,6 @@ public interface AtmobApi {
     @POST("/project/voice/v1/voice/textToSpeech")
     Single<BaseResponse<TextToSpeechResponse>> textToSpeech(@Body TextTosSpeechRequest request);
 
-
     @ConnectionTime(writeTimeout = 120)
     @POST("/project/voice/v1/voice/clone")
     Single<BaseResponse<VoiceCloneResponse>> voiceClone(@Body RequestBody requestBody);
@@ -81,4 +81,7 @@ public interface AtmobApi {
     @POST("/project/voice/v1/voice/randomText")
     Single<BaseResponse<RandomTextResponse>> randomText(@Body BaseRequest request);
 
+    @POST("/project/voice/v1/attribution/info")
+    Single<BaseResponse<Object>> attributionInfo(@Body AttributionRequest request);
+
 }

+ 13 - 0
app/src/main/java/com/atmob/voiceai/data/api/request/AttributionRequest.java

@@ -0,0 +1,13 @@
+package com.atmob.voiceai.data.api.request;
+
+import com.google.gson.annotations.SerializedName;
+
+public class AttributionRequest extends BaseRequest {
+
+    @SerializedName("attribution")
+    private String attribution;
+
+    public AttributionRequest(String attribution) {
+        this.attribution = attribution;
+    }
+}

+ 45 - 0
app/src/main/java/com/atmob/voiceai/data/repositories/ConfigRepository.java

@@ -6,9 +6,12 @@ import androidx.lifecycle.MutableLiveData;
 
 import com.alibaba.fastjson.JSONObject;
 import com.atmob.app.lib.handler.RxHttpHandler;
+import com.atmob.common.data.KVUtils;
 import com.atmob.voiceai.data.api.AtmobApi;
+import com.atmob.voiceai.data.api.request.AttributionRequest;
 import com.atmob.voiceai.data.api.request.ConfigRequest;
 import com.atmob.voiceai.data.api.response.ConfigsResponse;
+import com.atmob.voiceai.sdk.kochava.KochavaHelper;
 
 import java.util.List;
 import java.util.Objects;
@@ -29,12 +32,15 @@ public class ConfigRepository {
 
     private final String VOICE_TEXT_LIMIT = "voice_text_limit";
 
+    private final String ATTRIBUTION_INFO_SUCCESS = "attribution_info_success";
+
     private final String[] configs = {
             VOICE_TEXT_LIMIT
     };
     private final AtmobApi atmobApi;
 
     private boolean requesting;
+    private boolean requestAttribution;
 
     private final MutableLiveData<Integer> voiceTextLimit = new MutableLiveData<>(-1);
 
@@ -42,12 +48,44 @@ public class ConfigRepository {
     public ConfigRepository(AtmobApi atmobApi) {
         this.atmobApi = atmobApi;
         refreshConfigs();
+        attributionInfo();
     }
 
+
     public LiveData<Integer> getVoiceTextLimit() {
         return voiceTextLimit;
     }
 
+
+    private void attributionInfo() {
+        if (KVUtils.getDefault().getBoolean(ATTRIBUTION_INFO_SUCCESS, false) || requestAttribution) {
+            return;
+        }
+        KochavaHelper.registerAttributionResultCallback((attributed, attributionInfo) -> {
+            if (!attributed || attributionInfo == null) {
+                return;
+            }
+            attribution(attributionInfo.toString())
+                    .subscribe(new SingleObserver<Object>() {
+                        @Override
+                        public void onSubscribe(@NonNull Disposable d) {
+                            requestAttribution = true;
+                        }
+
+                        @Override
+                        public void onSuccess(@NonNull Object o) {
+                            requestAttribution = false;
+                            KVUtils.getDefault().putBoolean(ATTRIBUTION_INFO_SUCCESS, true);
+                        }
+
+                        @Override
+                        public void onError(@NonNull Throwable e) {
+                            requestAttribution = false;
+                        }
+                    });
+        });
+    }
+
     private void refreshConfigs() {
         if (requesting) {
             return;
@@ -89,6 +127,13 @@ public class ConfigRepository {
         }
     }
 
+    private Single<Object> attribution(String attribution) {
+        return atmobApi.attributionInfo(new AttributionRequest(attribution))
+                .compose(RxHttpHandler.handle(true))
+                .retryWhen(RxJavaUtil.exponentialBackOff(null, 8, TimeUnit.SECONDS))
+                .compose(RxJavaUtil.SingleSchedule.ioOnly());
+    }
+
     private Single<ConfigsResponse> getConfig(String[] configs) {
         return atmobApi.configs(new ConfigRequest(configs))
                 .compose(RxHttpHandler.handle(true))

+ 11 - 4
app/src/main/java/com/atmob/voiceai/sdk/kochava/KochavaHelper.java

@@ -16,6 +16,8 @@ import com.kochava.tracker.attribution.InstallAttributionApi;
 import com.kochava.tracker.engagement.Engagement;
 import com.kochava.tracker.log.LogLevel;
 
+import org.json.JSONObject;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -27,6 +29,7 @@ public class KochavaHelper {
     private static final Handler handler = new Handler(Looper.getMainLooper());
     private static Boolean attributed;
     private static String userAgent;
+    private static JSONObject attributionInfo;
 
     public static void init(Application application, FirebaseHelper firebaseHelper) {
         if (BuildConfig.DEBUG) {
@@ -51,6 +54,7 @@ public class KochavaHelper {
     private static void onAttributionResult(InstallAttributionApi installAttributionApi) {
         synchronized (KochavaHelper.class) {
             attributed = installAttributionApi.isAttributed();
+            attributionInfo = installAttributionApi.getRaw();
             Iterator<AttributionResultCallback> iterator = callbacks.iterator();
             while (iterator.hasNext()) {
                 AttributionResultCallback callback = iterator.next();
@@ -58,7 +62,7 @@ public class KochavaHelper {
                     iterator.remove();
                     continue;
                 }
-                handler.post(() -> callback.onResult(attributed));
+                handler.post(() -> callback.onResult(attributed, attributionInfo));
                 iterator.remove();
             }
         }
@@ -72,12 +76,12 @@ public class KochavaHelper {
             return;
         }
         if (attributed != null) {
-            callback.onResult(attributed);
+            callback.onResult(attributed, attributionInfo);
             return;
         }
         synchronized (KochavaHelper.class) {
             if (attributed != null) {
-                callback.onResult(attributed);
+                callback.onResult(attributed, attributionInfo);
                 return;
             }
             callbacks.add(callback);
@@ -104,9 +108,12 @@ public class KochavaHelper {
         return attributed != null && attributed;
     }
 
+    public static JSONObject getAttributionInfo() {
+        return attributionInfo;
+    }
 
     @FunctionalInterface
     public interface AttributionResultCallback {
-        void onResult(boolean attributed);
+        void onResult(boolean attributed, JSONObject attributionInfo);
     }
 }