Commit 6e080ac5 by sikang

添加AppsFlyer

parent a9c94bbd
......@@ -121,7 +121,7 @@ dependencies {
// api 'com.facebook.android:facebook-android-sdk:[4,5)'
//AppsFlyer
// api 'com.appsflyer:af-android-sdk:4+@aar'
api 'com.appsflyer:af-android-sdk:4+@aar'
//zendesk
api group: 'com.zendesk', name: 'support', version: '2.1.1'
......
......@@ -5,6 +5,7 @@ import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import com.appsflyer.AppsFlyerLib;
import com.google.firebase.FirebaseApp;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings;
......@@ -21,7 +22,7 @@ import com.tencent.bugly.crashreport.CrashReport;
import cn.fraudmetrix.octopus.aspirit.main.OctopusManager;
import tech.starwin.network.Gateway;
import tech.starwin.utils.FireBaseHelper;
import tech.starwin.utils.TrackEventHelper;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.ScreenAutoSize;
import tech.starwin.utils.collection.UploadManager;
......@@ -29,8 +30,6 @@ import zendesk.core.AnonymousIdentity;
import zendesk.core.Zendesk;
import zendesk.support.Support;
import static com.facebook.accountkit.internal.AccountKitController.getApplicationContext;
/**
* Created by SiKang on 2018/9/30.
* 配置 BaseLibrary
......@@ -42,6 +41,7 @@ public class LibConfig {
*/
private static Application CONTEXT;
public static boolean DEBUG;
public static String APP_NAME;
public static String APPLICATION_ID;
public static String BUILD_TYPE;
public static String FLAVOR;
......@@ -68,7 +68,7 @@ public class LibConfig {
public static String ZENDESK_OAUTH_CLIENT_ID;
public static String TONGDUN_PARENT_CODE;
public static String TONGDUN_PARENT_KEY;
public static String AF_DEV_KEY;
public static String APPSFLYER_DEV_KEY;
public static String XH_CHANNEL_NAME;
public static String LANGUAGE = "in";
public static int HARVESTER_PORT;//
......@@ -79,7 +79,7 @@ public class LibConfig {
public static ButterKnifeBinder butterKnifeBinder;
public static Context getContext() {
public static Application getContext() {
if (CONTEXT == null)
throw new RuntimeException("context is null ! you must execute LibConfig.initLib(context) in your Appliaction");
return CONTEXT;
......@@ -100,6 +100,7 @@ public class LibConfig {
//init FireBase
FirebaseApp.initializeApp(CONTEXT);
//RemoteConfig
// initFirebaseRemoteConfig();
......@@ -114,6 +115,12 @@ public class LibConfig {
CrashReport.initCrashReport(CONTEXT, BUGLY_APP_ID, DEBUG);
}
//init AppsFlyer
if (!TextUtils.isEmpty(APPSFLYER_DEV_KEY)) {
AppsFlyerLib.getInstance().startTracking(application, LibConfig.APPSFLYER_DEV_KEY);
}
//init zendesk
initZendesk(CONTEXT);
initTD();
......@@ -130,7 +137,7 @@ public class LibConfig {
.setDeveloperModeEnabled(LibConfig.DEBUG)
.build()
);
FireBaseHelper.fetchRemoteConfig();
TrackEventHelper.fetchRemoteConfig();
}
......
package tech.starwin.constants;
/**
* Created by SiKang on 2018/12/7.
*/
public class TrackEvent {
public static final String SMS_LOGIN_SUCCESS = "sms_login_success"; /*通过短信登录成功*/
public static final String FACEBOOK_LOGIN_SUCCESS = "facebook_login_success"; /*通过facebook account kit 登录成功*/
public static final String LOGOUT_SUCCESS = "logout_success"; /*用户退出了账号*/
public static final String IDENTITY_INFO_SUBMIT = "identity_card_ocr";//上传了身份证照片
public static final String PERSONAL_INFO_SUBMIT = "personal_info_submit";//上传了个人信息
public static final String CONTACT_INFO_SUBMIT = "contact_info_submit";//上传了紧急联系人信息
public static final String PROFESSIONAL_INFO_SUBMIT = "professinal_info_submit";//上传了工作信息
public static final String FACE_DETECTION = "face_detection"; /*进行了活体验证*/
public static final String FACE_DETECTION_SUCCESS = "face_detection_success"; /*活体验证成功,贷款处于已提交状态*/
public static final String BANK_INFO_SUBMIT = "bank_info_submit"; /*活体验证成功后,选择了产品,并填写了银行卡信息。贷款将进入机审(预审)阶段。*/
public static final String CANCEL_THE_LOAN_BY_USER = "cancel_the_loan_by_user"; /*用户取消了已提交的贷款*/
}
......@@ -2,7 +2,7 @@ package tech.starwin.impl;
import android.view.View;
import tech.starwin.utils.FireBaseHelper;
import tech.starwin.utils.TrackEventHelper;
/**
* Created by SiKang on 2018/10/11.
......@@ -13,7 +13,7 @@ public abstract class OnEventClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
FireBaseHelper.LogClickEventByTag(v);
TrackEventHelper.LogClickEventByTag(v);
onEventClick(v);
}
......
......@@ -3,11 +3,19 @@ package tech.starwin.mvp.presenter;
import android.text.TextUtils;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.ResponseBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.constants.TrackEvent;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.api.LoanApi;
import tech.starwin.mvp.beans.HistoryLoanAppInfoBean;
import tech.starwin.mvp.beans.LatestLoanAppBean;
import tech.starwin.mvp.beans.ProductBean;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.TrackEventHelper;
/**
* Created by SiKang on 2018/9/20.
......@@ -56,7 +64,28 @@ public class LoanPresenter extends BasePresenter<LoanApi> {
* 获取贷款记录
*/
public void getLoanHistory(String action) {
handleRequest(action, apiService.getLoanAppAll(LoginManager.get().getToken()));
handleRequest(apiService.getLoanAppAll(LoginManager.get().getToken()), new HttpObserver<List<HistoryLoanAppInfoBean>>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(List<HistoryLoanAppInfoBean> data) {
TrackEventHelper.logEvent(TrackEvent.CANCEL_THE_LOAN_BY_USER);
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
......@@ -89,16 +118,37 @@ public class LoanPresenter extends BasePresenter<LoanApi> {
* 申请贷款
*/
public void applyLoan(String action, LatestLoanAppBean loanInfo) {
handleRequest(action,
apiService.addBank(loanInfo.getLoanAppId(),
loanInfo.getBankCode(),
loanInfo.getCardNo(),
loanInfo.getApplyFor(),
loanInfo.getApplyChannel(),
"ANDROID",
loanInfo.getCouponId(),
LoginManager.get().getToken())
);
Observable<ResponseBody> observable = apiService.addBank(loanInfo.getLoanAppId(),
loanInfo.getBankCode(),
loanInfo.getCardNo(),
loanInfo.getApplyFor(),
loanInfo.getApplyChannel(),
"ANDROID",
loanInfo.getCouponId(),
LoginManager.get().getToken());
handleRequest(observable, new HttpObserver<ResponseBody>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(ResponseBody data) {
TrackEventHelper.logEvent(TrackEvent.BANK_INFO_SUBMIT);
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
/**
......
......@@ -9,6 +9,7 @@ import com.google.gson.Gson;
import java.io.File;
import tech.starwin.base.BasePresenter;
import tech.starwin.constants.TrackEvent;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.api.UploadApi;
import tech.starwin.mvp.beans.BasicAck;
......@@ -17,6 +18,7 @@ import tech.starwin.utils.GeneralUtils;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.TrackEventHelper;
/**
* Created by SiKang on 2018/9/25.
......@@ -40,6 +42,7 @@ public class UploadPresenter extends BasePresenter<UploadApi> {
@Override
public void onSuccess(OcrResultBean data) {
TrackEventHelper.logEvent(TrackEvent.IDENTITY_INFO_SUBMIT);
OcrResultBean.KTP ktp = new Gson().fromJson(data.getData(), OcrResultBean.KTP.class);
if (ktp.getResult().equals("PASS"))
view.onHttpSuccess(action, ktp);
......@@ -64,6 +67,7 @@ public class UploadPresenter extends BasePresenter<UploadApi> {
* 上传依图 截取得帧图片
*/
public void faceVerify(final String action, Context context, double amount, int day, long productId) {
TrackEventHelper.logEvent(TrackEvent.FACE_DETECTION);
handleRequest(
apiService.faceVerify(
"PAYDAY",
......@@ -85,6 +89,7 @@ public class UploadPresenter extends BasePresenter<UploadApi> {
@Override
public void onSuccess(BasicAck data) {
TrackEventHelper.logEvent(TrackEvent.FACE_DETECTION_SUCCESS);
view.onHttpSuccess(action, data);
}
......
......@@ -17,6 +17,7 @@ import io.reactivex.functions.Predicate;
import io.reactivex.schedulers.Schedulers;
import okhttp3.ResponseBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.constants.TrackEvent;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.api.LoanApi;
import tech.starwin.mvp.api.UploadApi;
......@@ -38,6 +39,7 @@ import tech.starwin.network.ServiceGenerator;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
import tech.starwin.utils.PreferencesManager;
import tech.starwin.utils.TrackEventHelper;
/**
* Created by SiKang on 2018/9/14.
......@@ -95,6 +97,7 @@ public class UserPresenter extends BasePresenter<UserApi> {
.flatMap(new Function<TokenInfoBean, ObservableSource<UserBean>>() {
@Override
public ObservableSource<UserBean> apply(TokenInfoBean tokenInfoBean) throws Exception {
TrackEventHelper.logEvent(TrackEvent.SMS_LOGIN_SUCCESS);
//刷新Token信息
LoginManager.get().notifyTokenInfo(tokenInfoBean);
return apiService.getUserInfo(tokenInfoBean.getToken());
......@@ -169,6 +172,7 @@ public class UserPresenter extends BasePresenter<UserApi> {
@Override
public void onSuccess(TokenInfoBean tokenInfoBean) {
TrackEventHelper.logEvent(TrackEvent.FACEBOOK_LOGIN_SUCCESS);
//刷新Token信息
LoginManager.get().notifyTokenInfo(tokenInfoBean);
view.onHttpSuccess(action, tokenInfoBean);
......@@ -187,6 +191,9 @@ public class UserPresenter extends BasePresenter<UserApi> {
}
/**
* 获取贷款状态、贷款详情、绑定银行卡、银行卡列表
* */
public void getBankAndLoanAmout(String action, LatestLoanAppBean loanBean) {
Observable<LoanInfo> observable = Observable.zip(
getService(LoanApi.class).getLatestLoanApp(LoginManager.get().getToken()),
......@@ -294,31 +301,75 @@ public class UserPresenter extends BasePresenter<UserApi> {
* 提交个人信息
*/
public void submitPersonalInfo(String action, PersonalInfoServerBean personalInfo) {
handleRequest(action,
apiService.submitPersonalInfo(
personalInfo.getFullName(),
personalInfo.getCredentialNo(),
personalInfo.getFamilyNameInLaw(),
personalInfo.getGender(),
personalInfo.getProvince(),
personalInfo.getCity(),
personalInfo.getDistrict(),
personalInfo.getArea(),
personalInfo.getAddress(),
personalInfo.getLastEducation(),
personalInfo.getMaritalStatus(),
personalInfo.getChildrenNumber(),
personalInfo.getResidenceDuration(),
personalInfo.getFacebookId(),
personalInfo.getWhatsappId(),
LoginManager.get().getToken()));
Observable<ResponseBody> observable = apiService.submitPersonalInfo(
personalInfo.getFullName(),
personalInfo.getCredentialNo(),
personalInfo.getFamilyNameInLaw(),
personalInfo.getGender(),
personalInfo.getProvince(),
personalInfo.getCity(),
personalInfo.getDistrict(),
personalInfo.getArea(),
personalInfo.getAddress(),
personalInfo.getLastEducation(),
personalInfo.getMaritalStatus(),
personalInfo.getChildrenNumber(),
personalInfo.getResidenceDuration(),
personalInfo.getFacebookId(),
personalInfo.getWhatsappId(),
LoginManager.get().getToken());
handleRequest(observable, new HttpObserver<ResponseBody>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(ResponseBody data) {
TrackEventHelper.logEvent(TrackEvent.PERSONAL_INFO_SUBMIT);
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
/**
* 提交联系人信息
*/
public void submitContactInfo(String action, String parentName, String parentPhone, String friendName, String friendPhone) {
handleRequest(action, apiService.submitContactInfo(parentName, parentPhone, friendName, friendPhone, LoginManager.get().getToken()));
handleRequest(apiService.submitContactInfo(parentName, parentPhone, friendName, friendPhone, LoginManager.get().getToken()),
new HttpObserver<ResponseBody>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(ResponseBody data) {
TrackEventHelper.logEvent(TrackEvent.CONTACT_INFO_SUBMIT);
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
......@@ -370,11 +421,33 @@ public class UserPresenter extends BasePresenter<UserApi> {
handleRequest(action, Observable.zip(info, upload, new BiFunction<ResponseBody, ResponseBody, Boolean>() {
@Override
public Boolean apply(ResponseBody responseBody, ResponseBody responseBody2) throws Exception {
TrackEventHelper.logEvent(TrackEvent.PROFESSIONAL_INFO_SUBMIT);
return true;
}
}));
} else {
handleRequest(action, info);
handleRequest(info, new HttpObserver<ResponseBody>() {
@Override
public void onStart() {
view.onHttpStart(action, true);
}
@Override
public void onSuccess(ResponseBody data) {
TrackEventHelper.logEvent(TrackEvent.PROFESSIONAL_INFO_SUBMIT);
view.onHttpSuccess(action, data);
}
@Override
public void onError(int code, String msg) {
view.onHttpError(action, msg);
}
@Override
public void onFinish() {
view.onHttpFinish(action);
}
});
}
}
......
......@@ -5,7 +5,6 @@ import android.text.TextUtils;
import java.io.IOException;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.Request;
......@@ -13,6 +12,7 @@ import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.internal.Util;
import tech.starwin.LibConfig;
import tech.starwin.R;
/**
* Created by XLEO on 2018/1/30.
......@@ -60,7 +60,10 @@ class DefaultHeaderAddInterceptor implements Interceptor {
requestBuilder.header("X-APP-TYPE", "ANDROID")
.header("X-APP-VERSION", String.valueOf(LibConfig.VERSION_CODE))
.header("X-APP-PACKAGE-NAME", LibConfig.APPLICATION_ID);
.header("X-APP-VERSION-NAME", String.valueOf(LibConfig.VERSION_NAME))
.header("X-APP-PACKAGE-NAME", LibConfig.APPLICATION_ID)
.header("X-APP-NAME", LibConfig.APP_NAME)
.header("X-AF-ID", LibConfig.APPSFLYER_DEV_KEY);
return chain.proceed(requestBuilder.build());
}
......
......@@ -8,6 +8,7 @@ import android.util.Base64;
import java.util.Map;
import tech.starwin.constants.TrackEvent;
import tech.starwin.mvp.beans.DisplayBean;
import tech.starwin.mvp.beans.GatewayInfoBean;
import tech.starwin.mvp.beans.OcrResultBean;
......@@ -197,6 +198,7 @@ public class PreferencesManager {
* 清除登录信息
*/
public void clearLoginInfo() {
TrackEventHelper.logEvent(TrackEvent.LOGOUT_SUCCESS);
mEditor.remove("user_info");
mEditor.remove("token_info");
mEditor.remove("ktp_info");
......
......@@ -8,17 +8,20 @@ import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.appsflyer.AppsFlyerLib;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
import tech.starwin.LibConfig;
/**
* Created by SiKang on 2018/10/11.
* FireBase 功能辅助类
*/
public class FireBaseHelper {
public class TrackEventHelper {
public static final String REST_URL = "rest_url";
/**
......@@ -50,8 +53,22 @@ public class FireBaseHelper {
*/
public static void logClickEventByName(Context context, String itemName) {
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "click_" + itemName);
String eventName = "click_" + itemName;
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, eventName);
//FireBase 埋点
FirebaseAnalytics.getInstance(context).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
//AF 埋点
AppsFlyerLib.getInstance().startTracking(LibConfig.getContext(), eventName);
}
/**
* 行为埋点
*/
public static void logEvent(String eventName) {
//FireBase 埋点
FirebaseAnalytics.getInstance(LibConfig.getContext()).logEvent(eventName, null);
//AF 埋点
AppsFlyerLib.getInstance().startTracking(LibConfig.getContext(), eventName);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment