others-AppsFlyer第三方统计


title: others-AppsFlyer第三方统计
categories: Others
tags: [others, AppsFlyer, 统计]
date: 2020-08-18 16:08:26
comments: false
mathjax: true
toc: true

others-AppsFlyer第三方统计


前篇

  • 官网 - https://www.appsflyer.com/
    • Android 集成文档: https://support.appsflyer.com/hc/en-us/articles/207032126-AppsFlyer-SDK-Integration-Android#introduction
    • 事件测试文档: https://support.appsflyer.com/hc/en-us/articles/360001559405#test-from-dashboard-testing-inapp-events
    • 测试白名单添加: https://hq1.appsflyer.com/test-devices/devices
    • 第三方应用商店的应用追踪 - https://support.appsflyer.com/hc/zh-cn/articles/207447023#%E7%AE%80%E4%BB%8B

接入

  1. build.gradle 引入库

    dependencies {
           
        implementation 'com.appsflyer:af-android-sdk:5.4.0'
        implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0'
        implementation 'com.android.installreferrer:installreferrer:2.1'
    }
    
  2. 权限 及 广播 的 清单配置 AndroidManifest.xml

    <manifest>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        
        <application>
    		
            <receiver
                android:name="com.appsflyer.SingleInstallBroadcastReceiver"
                android:exported="true">
                <intent-filter>
                    <action android:name="com.android.vending.INSTALL_REFERRER" />
                intent-filter>
            receiver>
        application>
    manifest>
    
  3. 混淆配置 proguard-user.txt

    ######### appsflyer #########
    -keep public class com.android.installreferrer.** {
            *; }
    -keep class com.appsflyer.** {
            *; }
    -dontwarn com.android.installreferrer
    
  4. java 代码

    package com.yang.androidaar.other;
    
    import android.content.Context;
    import android.util.Log;
    
    import com.appsflyer.AppsFlyerConversionListener;
    import com.appsflyer.AppsFlyerLib;
    import com.yang.androidaar.Define;
    import com.yang.androidaar.JsonTool;
    import com.yang.androidaar.MyCode.ECode;
    import com.yang.androidaar.Tools;
    import com.yang.androidaar.model.JsonBean.CEventInfo;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class AppsflyerHelper {
           
    
        static AppsflyerHelper instance = null;
        public static AppsflyerHelper getIns() {
           
            if (instance == null) {
           
                instance = new AppsflyerHelper();
            }
            return instance;
        }
    
        private static final String TAG = "--- AppsflyerHelper";
        private String mAfJson = null;
        private boolean mIsCall = false;
    
        public void init(Context context, boolean isDebug, Define.JsonRunnable task) {
           
            try {
           
                // af 回调
                innerInit(context, isDebug, (code, afJson) -> {
           
                    if (code != ECode.Ok) {
           
                        return;
                    }
                    mAfJson = afJson;
                });
    
            } catch (Exception e) {
           
                e.printStackTrace();
                callTask(task);
            }
        }
    
        private void innerInit(Context context, boolean isDebug, Define.CodeRunnable task) {
           
            String devKey = Tools.GetStringVaule(context, "af_dev_key"); // 获取 af 后台的秘钥
            AppsFlyerConversionListener conversionListener = new AppsFlyerConversionListener() {
           
    
                @Override
                public void onConversionDataSuccess(Map<String, Object> conversionData) {
           
                    // 转化回调
                    task.run(ECode.Ok, JsonTool.toJson(conversionData));
                }
    
                @Override
                public void onConversionDataFail(String errorMessage) {
           
                    task.run(ECode.LoginError, errorMessage);
                }
    
                @Override
                public void onAppOpenAttribution(Map<String, String> attributionData) {
           
                    // 深度连接的回调: https://support.appsflyer.com/hc/zh-cn/articles/213766183-%E5%BC%80%E5%8F%91%E8%80%85Unity-Plugin-V4%E5%AF%B9%E6%8E%A5%E6%8C%87%E5%8D%97#%E6%A0%B8%E5%BF%83api
                    Log.d(TAG, "onAppOpenAttribution: ");
                }
    
                @Override
                public void onAttributionFailure(String errorMessage) {
           
                    Log.d(TAG, "onAttributionFailure: ");
                }
            };
    
            // af 初始化, 在 onCreate 的时候就调用
            AppsFlyerLib.getInstance().init(devKey, conversionListener, context);
            AppsFlyerLib.getInstance().startTracking(context);
            AppsFlyerLib.getInstance().setDebugLog(isDebug);
        }
    
        public void logEvent(Context context, String jsonMsg, Define.CodeRunnable task) {
           
            CEventInfo ei = JsonTool.toObject(jsonMsg, CEventInfo.class);
            logEvent(context, ei, task);
        }
    
        public void logEvent(Context context, CEventInfo ei, Define.CodeRunnable task) {
           
            if (ei == null || ei.name.length() == 0) {
           
                return;
            }
            AppsFlyerLib.getInstance().trackEvent(context, ei.name, ei.params);
        }
    
        public String getInfo() {
           
            Map<String, Object> args = new HashMap<>();
            args.put("AfJson", mAfJson);
            return JsonTool.toJson(args);
        }
    
        private void callTask(Define.JsonRunnable task) {
           
            if (mIsCall || task == null) {
           
                return;
            }
    
            mIsCall = true;
            task.run(mAfJson);
        }
    }
    

自定义短链配置

Google Play 应用的短链推广

  1. 后台配置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLY5kdKV-1599127238020)(http://yxbl.itengshe.com/20200818164047-1.webp)]

  2. onConversionDataSuccess 中可以获取到对应的参数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9L622D7-1599127238022)(http://yxbl.itengshe.com/20200818164132-1.webp)]


Facebook Ads 投放

需要 Facebook 对应的 app id 接收 服务条款, 才能在 af 的 onConversionDataSuccess 回调中, 接收到 campaign 相关数据

链接: https://www.facebook.com/ads/manage/advanced_mobile_measurement/app_based_tos?appid=123123 (123123 是 app id)

others-AppsFlyer第三方统计_第1张图片

  • 参考: 设备层级数据)

    others-AppsFlyer第三方统计_第2张图片


你可能感兴趣的:(Others,appsflyer,统计)