Meta 安装引荐来源

本文档介绍如何在您的 Android 应用中使用 Meta 安装引荐来源来获取以应用安装量为目标的 Facebook、Instagram 和 Audience Network 广告系列的元数据。Google Play Install Referrer (GPIR) 仅提供同一会话点击安装量的信息,而 Meta 安装引荐来源则包含以下数据:

  • 浏览安装量 (VT)
  • 点击安装量 (CT)
  • 多会话点击安装量

如要为您的 Android 应用广告系列设置 Meta 安装引荐来源,您可以采用两个选项:直接集成通过移动应用成效衡量合作伙伴 (MMP) 的支持集成

选项 1:直接集成

前期准备

开始之前,您需要:

第 1 步:添加 Meta 应用

在您的 AndroidManifest.xml 文件中,为 Facebook、Instagram 和 Facebook Lite 应用添加 queries 元素,以允许您的应用从这些 Meta 应用中获取推荐归因数据。

<queries>
  <package android:name="com.facebook.katana" />
</queries>

<queries>
  <package android:name="com.instagram.android" />
</queries>

<queries>
  <package android:name="com.facebook.lite" />
</queries>

第 2 步:实现 ContentProvider API

添加 ContentProvider 代码,以从 Facebook 和 Instagram 应用获取推荐归因数据。建议您在应用首次启动时获取这些数据。

Cursor c = null;
try {
    String [] projection = { "install_referrer", "is_ct", "actual_timestamp", };
    Uri providerUri = null;
    
    // This IF statement queries the facebook app first.
    // To query from the instagram app first, change the sequence of the IF statement

    if (context.getPackageManager().resolveContentProvider(
           "com.facebook.katana.provider.InstallReferrerProvider", 0) != null) {
       providerUri = Uri.parse(
           "content://com.facebook.katana.provider.InstallReferrerProvider/" + FB_APP_ID);
    } else if (context.getPackageManager().resolveContentProvider(
           "com.instagram.contentprovider.InstallReferrerProvider", 0) != null) {
       providerUri = Uri.parse(
           "content://com.instagram.contentprovider.InstallReferrerProvider/" + FB_APP_ID);
    } else if (context.getPackageManager().resolveContentProvider(
           "com.facebook.lite.provider.InstallReferrerProvider", 0) != null) {
       providerUri = Uri.parse("content://com.facebook.lite.provider.InstallReferrerProvider/" + FB_APP_ID);
    } else {
       return null;
    }

    c = context.getContentResolver().query(providerUri, projection, null, null, null);
    if (c == null || !c.moveToFirst()) {
       return null;
    }

    int installReferrerIndex = c.getColumnIndex("install_referrer");
    int timestampIndex = c.getColumnIndex("actual_timestamp");
    int isCTIndex = c.getColumnIndex("is_ct");
    String installReferrer = c.getString(installReferrerIndex); // serialized and encrypted attribution details

    // TODO: 
    // 1. deserialize installReferrer (convert String to JSON)
    // 2. decrypt attribution details in install_referrer.utm_content.source.data using 
    // key: GPIR decryption key 
    // nonce: retrieve from installReferrer.utm_content.source.nonce
    // data: retrieve from installReferrer.utm_content.source.data
    // decrypt data 

    long actualTimestamp = c.getLong(timestampIndex); // timestamp in seconds for click/impression
     int isCT = c.getInt(isCTIndex); // VT or CT, 0 = VT, 1 = CT
           
} catch (Exception e) {
    return null;
} finally {
    if (c != null) {
        c.close();
    }
}

反序列化和解密这些数据的步骤与安装引荐来源指南中所述的步骤相似。

对每个 Meta 应用实行反序列化之后,从 install_referrer 收到的数据结构响应中会包含:

  • actual_timestamp – 值是点击或展示时的时间戳(以秒为单位)
  • is_ct – 值可能是 1(表示点击)或 0(表示展示)
  • install_referrer – 值是经过加密的 GPIR 归因数据

JSON 响应示例

{
  is_ct=1,
  actual_timestamp=123,
  install_referrer={
    utm_campaign = fb4a,
    utm_content: {
      source: {
        data: “7fb9bd76…”, // encrypted attribution information
        nonce: “1234” // nonce from encryption
      },
      a: <app_id>,
      t: <timestamp>
    }
    utm_source : “apps.facebook.com” //OR “apps.instagram.com”
  }
}

解密 install_referrer.utm_content.source 之后的数据示例

{ 
  "ad_id":"6110809314024", 
  "adgroup_id":"6110808725024", 
  "adgroup_name":"RTG_Storie_", 
  "campaign_id":"6110808710224", 
  "campaign_name":"Mobex_Conversiones_Storie_Android_21 a 31 de Diciembre_OP39895",
  "campaign_group_id":"6110808710624", 
  "campaign_group_name":"Mobex_Instagram Storie_ Conversiones_ Diciembre OP 43918",
  "account_id":"485495091598353",
  "ad_objective_name":"CONVERSIONS", 
  // data included for Instagram ads
  "is_instagram":true,
  "publisher_platform":"instagram",                
  "platform_position":"instagram_stories"          
}

第 3 步:去重数据

如果已获取 GPIR 广告系列的元数据,您应该遵循您现有的 GPIR 去重流程。

使用安装引荐来源去重

您可以使用 install_referrer 中返回的数据来删除重复数据,因为在 Meta 安装引荐来源提供的 CT 中,一次安装或一个广告系列的这些值与 GPIR 提供的相应值是相同的。

对于 VT 和跨会话 CT,由于不受 GPIR 支持,应使用 Meta 安装引荐数据。

如果未获取 GPIR 广告系列的元数据,您需要根据您是否与移动应用成效衡量合作伙伴 (MMP) 合作来去重数据。

与 MMP 合作的去重

对于因归因于 Meta 安装或自然安装而导致归因广告网络未成功的安装,移动应用成效衡量合作伙伴 (MMP) 有权访问这些安装的行级归因数据。您可以检查是否有通过 Meta 安装引荐来源提供的安装引荐来源。如有,您可以认为是 Meta 促成了某次安装,并且提供的安装推荐来源数据是此次安装的广告系列元数据。

不与 MMP 合作的去重

Meta 安装引荐来源提供某次安装的最后触点信息,包括广告系列元数据、最后触点的实际时间戳和最后触点的操作类型(展示或点击)。您可以使用您从其他广告网络获取的归因数据,比较最后触点的操作类型和最后触点的时间戳,然后确定归因到哪个广告网络。

验证设置

首先,确保您使用的是支持此解决方案的应用版本。最低版本分别是:

  • Facebook:v428
  • Instagram:v296
  • Facebook Lite:v411

按照以下步骤操作,可验证您的设置:

  1. 使用广告管理工具中的预览功能添加测试广告系列
  2. 在 Facebook 或 Instagram 上找到并点击所需广告
  3. 第 2 步的代码中添加断点或日志

您的应用应该会收到响应进行解密,以查看广告系列数据。

选项 2:通过 MMP 的支持集成

第 1 步:更新您的移动应用成效衡量合作伙伴 (MMP) SDK

将 MMP SDK 更新为集成了 Meta 安装引荐来源的版本:

  • AppsFlyer SDK:AppsFlyer SDK v6.14.2 及以上版本
  • Adjust SDK:Adjust SDK v4.36.0 及以上版本(Flutter 4.36.0 及以上版本、Unity 4.37.0 及以上版本)
  • Singular SDK 或 S2S API:Singular SDK v12.3.0 及以上版本(Unity 4.2.0 及以上版本、React Native 3.3.0 及以上版本、Unreal 2.2.0 及以上版本)
  • Kochava SDK:Kochava Android SDK v5.1.0 及以上版本
  • Airbridge SDK:Airbridge Android SDK v2.22.3 及以上版本
  • Branch SDK:Branch SDK v5.10.1 及以上版本

第 2 步:确保您的 Facebook 应用编号已与您的 MMP SDK 关联

请通过下方链接查看说明。

第 3 步:您可能需要更新应用的 Android 清单文件,具体取决于 MMP

请通过下方链接查看说明。

  • Kochava 说明(前往“Meta/Facebook”部分)
  • AppsFlyer、Adjust、Singular 和 Airbridge 会通过各自的 SDK 自动处理这一步
  • 如果您使用的是 Flutter SDK 或 React SDK,而不是您 MMP 的 Android SDK,请联系您的 MMP

第 4 步:分享您的安装引荐来源解密密钥,以便 MMP 能够解密引荐来源元数据

注意:如果您已为 Google Play 商店安装引荐来源完成此操作,则无须执行此步骤。