Meta 安裝引介來源

本文件說明如何在 Android 應用程式中使用 Meta 安裝引介來源,取得以應用程式安裝為目標的 Facebook、Instagram 和 Audience Network 廣告行銷活動中繼資料。雖然 Google Play 安裝引介來源(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 安裝引介來源和 GPIR 之間的 CT 安裝值或行銷活動值相同。

若是 VT 和跨連線階段 CT,請使用 Meta 安裝引介來源,因為 GPIR 不支援。

如果缺少 GPIR 廣告行銷活動中繼資料,您可以根據是否搭配使用行動成效衡量合作夥伴(MMP)來刪除重複資料。

使用 MMP 刪除重複資料

行動成效衡量合作夥伴(MMP)可以存取未擁有勝出廣告聯播網之安裝的列層級歸因資料,這些安裝可能是歸因於 Meta 安裝,也可能是自主安裝。您可以經由 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:視 MMP 而定,您可能需要更新應用程式的 Android Manifest 檔案

請透過下方連結查看相關說明。

  • Kochava 說明(前往 Meta/Facebook 部分)
  • AppsFlyer、Adjust、Singular 和 Airbridge 會透過其 SDK 自動執行此步驟
  • 若是使用 Flutter / React SDK 而非 Android SDK,請洽詢您的 MMP

步驟 4:分享您的安裝引介來源解密金鑰,讓 MMP 能解密引介中繼資料

注意:如果您已經為 Google Play 商店安裝引介來源完成此操作,則無需執行此步驟。