Skip to main content

AppsFlyer

入门指引

AppsFlyer 支持 AppsFlyer SDK 提供的以下 deep linking 功能:

  • Deep linking:目标应用已经安装时会发生 deep linking。已配置的 deep link 将用户发送到特定的应用内位置或完成特定的应用内活动。

  • Deferred deep linking:在目标应用程序未安装时发生 deferred deep linking。 已配置的 deep link 将用户发送到特定应用商店中目标应用的下载页面。当用户安装并打开应用程序时,deferred deep linking 将用户发送到应用程序内的目标位置或实'现目标应用内活动。

AppsFlyer OneLink 是 AppsFlyer 特有的跨平台归因链接,支持用户从不同平台(例如邮件,社媒平台,网页,QR码等)跳转到目标应用,并回传用户 ID。业务需确认回传的 ID 是 OpenID 或 device ID,并根据所得的用户 ID 用于最后数据分析时归因受邀用户的相关渠道。

步骤1:在 AppsFlyer 控制台上创建一个应用

根据 AppsFlyer 文档 添加应用程序 来创建您的应用程序。

步骤2:配置 OneLink

note

如果是 OneLink 管理的新手,请根据新客户使用指引配置 OneLink 模板。更多信息,请参见 OneLink 模板

  1. 进入 AppsFlyer OneLink 管理

  2. 在右上角,点击菜单图标后选择添加 OneLink 模板,并记录模板 ID。

    图片:OneLink配置

  3. 在 OneLink 设置页面,输入模板名称,子域名,并选择之前创建的应用程序。
    记录输入的子域名。

    图片:OneLink 配置 2

  4. 对于 Android 应用程序,在 When app is installed 部分,点击 Use App Links to launch the app 添加 keystoreSHA-256。更多信息,请参见 Android initial setup

    图片:OneLink 配置 3

  5. 复制并保存 AppsFlyer 后台生成的 intent-filter 代码。

    图片:OneLink 配置 3

  6. 保存 OneLink 模板。

步骤3:配置 Player Network SDK

iOS
  1. INTLConfig.ini[AppsFlyer] 节点下添加以下代码,并将 {OneLink_Template_ID} 替换为 步骤2 记录的模板 ID。

    APPSFLYER_APP_INVITE_ONELINK_ID_IOS = {OneLink_Template_ID}
  2. Assets\INTLSDK\Editor\XUPorter\XCodePostProcess.cs 中,将从步骤2中得到的子域名 (例如 appslinks:subdomain.onelink.me) 添加到该行。

capManager.AddAssociatedDomains(new string[] { "appslinks:subdomain.onelink.me"});
Android
  1. INTLConfig.ini[AppsFlyer] 节点下添加以下代码,并将 {OneLink_Template_ID} 替换为 步骤2 记录的模板 ID。

    APPSFLYER_APP_INVITE_ONELINK_ID_ANDROID = {OneLink_Template_ID}
  2. INTLConfig.ini 中的 [Android LifeCycle] 不包含 AppsFlyer,则添加 AppsFlyer。

    LIFECYCLE = WeChat,QQ,Twitter,Adjust,Facebook,Google,Line,VK,Garena,Discord,Dmm,Update,Firebase,WhatsApp,Permission,GooglePGS,AppsFlyer
  3. AndroidManifest.xml 的游戏主 Activity 节点下添加在 步骤2 中保存的 Android intent-filter 代码。
    此代码用于打开游戏,请根据实际情况替换 {Subdomain}{OneLink_Template_ID}

    <activity>
    android:name="com.intlgame.unity.MainActivity"
    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
    android:exported="true"
    android:label="@string/app_name"
    android:launchMode="singleTask">
    <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
    android:host="{Subdomain}.onelink.me"
    android:pathPrefix="/{OneLink_Template_ID}"
    android:scheme="https" />
    </intent-filter>
    </activity>

更多信息,请参见 OneLink 链接与用户体验

  1. 设置生成 OneLink 的回调。
INTLAPI.AddExtendResultObserver(OnExtendEvent);//设置回调
INTLExtend.Invoke("AppsFlyer", "generateInviteLinkUrl", paramsJsonString);// paramsJsonString是需要传送给OneLink的信息
public void OnExtendEvent(INTLExtendResult extendResult)
{
if ("generateInviteLinkUrl".Equals(extendResult.ExtendMethodName))//生成 OneLink 的方法
{
if (extendResult.RetCode == 0)//OneLink 生成成功
{
string inviteUrl = extendResult.RetMsg;//生成的 OneLink,可以分享给其他玩家
//TODO:share link to other players
}
else//OneLink 生成失败
{
//TODO: handle OneLink Failed result
}
}
}

  1. 设置被分享链接的用户点击生成的 OneLink 后的结果回调。

生成 OneLink 和点击 OneLink 共用一个回调,通过回调中的 INTLExtendResult 的参数区分。

    INTLAPI.AddExtendResultObserver(OnExtendEvent);//设置回调
public void OnExtendEvent(INTLExtendResult extendResult)
{
if ("OnOneLinkResult".Equals(extendResult.ExtendMethodName))//OneLink 点击回调
{
if (extendResult.RetCode == 0)//OneLink 点击回调成功
{
string jsonParameter = extendResult.ExtraJson;//点击 OneLink 后 AF 返回的参数
//TODO:Handle OneLink Parameter
}
else//OneLink 点击回调失败
{
//TODO: handle OneLink Failed result
}
}
}

  1. 参考以下代码生成 OneLink,并根据实际情况替换代码中的参数。
 StringBuilder sb = new StringBuilder();
sb.Append("{");
sb.Append("\"deep_link_value\":\"abc\"").Append(","); //<TARGET_VIEW>

sb.Append("\"deep_link_sub1\":\"1234\"").Append(",");//<PROMO_CODE>
sb.Append("\"deep_link_sub2\":\"1234\"").Append(",");//<REFERRER_ID(openid)>
sb.Append("\"channel\":\"mobile_share\"").Append(",");//Channel
sb.Append("\"campaign\":\"summer_sale\"");//Campaign
//其他参数,可选
sb.Append("\"deep_link_sub3\":\"1234\"").Append(",");
sb.Append("\"deep_link_sub4\":\"1234\"").Append(",");
sb.Append("\"deep_link_sub5\":\"1234\"").Append(",");
sb.Append("\"deep_link_sub6\":\"1234\"").Append(",");
sb.Append("\"deep_link_sub7\":\"1234\"").Append(",");
sb.Append("\"deep_link_sub8\":\"1234\"").Append(",");

sb.Append("\"af_sub4\":\"12324\"").Append(",");
sb.Append("\"af_sub5\":\"dfasdf\"").Append(",");

sb.Append("}");
String paramsJsonString = sb.ToString();
INTLExtend.Invoke("AppsFlyer", "generateInviteLinkUrl", paramsJsonString);

集成测试

  1. 进入 AppsFlyer 控制台。

  2. 在左侧边栏中,单击 SDK Integration Tests

  3. 选择要测试的应用程序,点击 Run test

    图片:集成测试 1

  4. Run non-organic install test 页面,选择测试设备并选择 Other

  5. 扫描二维码并安装应用。

    图片:集成测试 2

note

若要再次测试激活,请删除该应用程序并重新启动测试。

参考文档

AppsFlyer 深度链接和 OneLink:Deep linking

iOSAndroid
初始设置初始设置
统一 deep linking统一 deep linking
旧版本 API旧版本 API
使用 iOS 私人中继的延迟 deep link使用 Android 私人中继的延迟 deep link
用户邀请属性用户邀请属性