简介
什么是预安装广告系列?
预安装广告系列使应用所有者无需运行在线广告系列即可覆盖广泛的受众。
在预安装广告系列中,应用所有者可以要求设备制造商在出厂之前在设备上预安装应用。
预安装广告系列也可以与第三方媒体渠道合作,这些媒体渠道代表应用所有者与各种手机厂商合作。
重要信息!
当应用程序首次启动时,AppsFlyer会计算一次激活。因此,显示的预安装数量是启动您的应用的用户数量,而不是预先安装了该应用的设备的数量。
记录来自预安装广告系列的激活的好处
通过归因预安装广告系列,您可以衡量:
- 启动您的预安装应用程序的用户数
- 每个厂商带来的应用程序用户数
- 每个用户的LTV并确定哪个厂商能带来高价值用户
如何衡量预安装广告系列?
There are four ways to measure pre-install campaigns. For more information, see the Setup section in this article.
查看预安装数据
就像任何其他激活事件一样,预安装将显示在AppsFlyer面板中被归因的媒体渠道下面。但是,他们的广告系列名称始终是Pre-install 。
注意
You can specify different campaign names for pre-installs with the SDK API Method.
配置预安装测量方法
从以下方法中选择一种来衡量预安装广告系列。
方法名称 | 需要多个APK吗? | 保证预安装归因? | 需要媒体渠道或厂商采取行动吗? |
---|---|---|---|
System Properties | 否 | 是 | 是 |
SDK API | 是 | 否 | 否 |
Name in Manifest File | 是 | 否 | 否 |
Path Way | 否 | 否 | 是 |
System properties方法 (推荐)
注意
SDK4.4.0及更高版本支持
推荐使用System properties方法。它是所有方法中最简洁,最可靠的方法。该方法克服了上面列出的所有其他方法的缺点。
系统属性方法要求开发者和厂商双方都采取措施。
开发人员
您需要向厂商或媒体渠道提供APK。提供了默认的APK。此方法不需要单独的APK。
Create a file called pre_install.appsflyer. In the file, add the following key-value pair: <packagename>=<media_source>
For example: com.appsflyer.sampleapp=huawei
.
传递其他预安装参数
您可以使用JSON在文件中指定其他预安装参数。例如,您可以在pre_install.appsflyer文件中添加以下键值对:
com.appsflyer.sampleapp={"pid":"huawei", "c":"special_campaign","af_adset":"some_adset"}
重要信息!
使用此选项时,请注意以下行为,这一点很重要:
- 它将“Pre-install”设置为af_channel
- 如果JSON中没有pid,则媒体渠道显示为“无”
- 在JSON配置中,如果c参数不存在,则广告系列名称将设置为“Pre-install”
- 如果JSON格式错误,则将传递的字符串显示为媒体渠道名称
一旦拥有pre_install.appsflyer文件后,将其与APK一起提供给媒体渠道或厂商。
厂商
厂商将pre_install.appsflyer放置在其选择的文件路径中。pre_install.appsflyer文件许可权应设置为447。
然后,厂商编辑system properties文件,以指向pre_install.appsflyer文件。为此,厂商需要在system properties中添加一个键值对。
注意
Root permissions are required for this step. Root permissions are also required when testing pre-install configuration. See the Testing section for more details.
将键值对添加到Android system properties:
adb shell su
setprop ro.appsflyer.preinstall.path /data/pre_install.appsflyer
另一种方法是从android文件系统中检索system-properties-file,对其进行编辑,然后将其返回:
adb root
adb remount
adb pull /system/build.prop
echo ro.appsflyer.preinstall.path=/data/pre_install.appsflyer >> build.prop
adb push build.prop /system/build.prop
adb shell chmod 644 /system/build.prop
adb reboot
优势
无需为每个媒体渠道或厂商维护不同的APK。无需在上架到Google Play的应用上进行更改并添加路径。厂商可以使用自定义路径,并且在不同设备上运行的多个预安装应用程序之间没有依赖关系。
此方法可确保将激活归因于预安装的广告系列和媒体渠道。即使用户在启动前更新应用程序或单击广告后安装应用程序,预安装仍归因于预安装媒体渠道或厂商。
缺点
一些责任被转移到媒体渠道或厂商。开发者需要确保厂商或媒体渠道采取了必要的步骤。此外,对于应用程序开发者而言,此方法可能会更难测试。
SDK API方法
SDK API方法提供了一种本机方式来指定预安装所归属的厂商或媒体渠道名称。
要使用此方法,请在初始化SDK之前在AFApplication类中添加以下方法调用:
setPreinstallAttribution(String mediaSource, String campaign, String siteId)
与媒体渠道合作时
AppsFlyerLib.getInstance().setPreinstallAttribution("MEDIA_SOURCE_NAME", "CAMPAIGN_NAME", "123");
AppsFlyerLib.getInstance().init(AF_DEV_KEY , conversionListener , getApplicationContext());
与厂商合作时
AppsFlyerLib.getInstance().setPreinstallAttribution(android.os.Build.MANUFACTURER, "CAMPAIGN_NAME", "123");
AppsFlyerLib.getInstance().init(AF_DEV_KEY , conversionListener , getApplicationContext());
注意
- 媒体渠道参数是必需的。
android.os.Build.MANUFACTURER
属性包含操作系统配置的厂商名称。使用此属性不能保证您从该厂商的设备中以相同格式获得厂商名称。确保该属性按预期包含厂商名称。campaign
和siteId
参数不是必须参数,但是使用setPreinstallAttribution
方法必需需要这两个参数。如果您不想指定campaign
和siteId
,请使用null作为这两个字段的内容。
优势
SDK API方法可让您以程序化的方式检索厂商名称。无论厂商如何,SDK方法都直接从设备检索名称。这意味着您可以为与之合作的所有厂商维护一个APK。
setPreinstallAttribution
方法允许您指定活动名称。您可以将每个厂商或媒体渠道划分为不同的广告系列,而不是全部在“Pre-install”广告系列下进行设置。
缺点
如果您直接与厂商合作,则必须维护两个版本的APK,一个用于厂商,另一个用于Google Play。无论哪种情况,都需要多个APK。
如果您正在使用多个代表您与厂商进行沟通的媒体渠道,则需要为每个媒体渠道维护一个单独的APK。
在某些情况下,激活可能不会归因于预安装媒体渠道:
- 拥有新设备的用户未首次启动应用而是直接从Google Play更新预安装的应用,该激活将被视为自然激活。
- 使用新设备的用户在点击广告后从Google Play更新应用,安装归因于投放广告的媒体渠道。
提示
您可以在应用程序中实现逻辑,以确保即使上述情况发生,激活也被视为预安装。Google Play商店APK和用于预安装的APK都应包含该逻辑。
示例
您知道应用已预先安装在给定厂商和型号的设备上。这些设备也以给定的运营商运行。
应用启动时,您可以在应用启动时检查这些条件。如果满足这些条件,则激活将记录为预安装。由于该逻辑也存在于Play商店APK中,因此即使用户在启动应用之前对其进行了更新,激活也会记录为“预安装”。
Name in manifest file方法
The name in manifest 方法要求您向应用的manifest文件中添加metadata标签。您需要对与之合作的每个媒体渠道或厂商重复此步骤。
在关闭应用程序标签之前添加metadata标签:
...
<meta-data android:name="AF_PRE_INSTALL_NAME" android:value="market_name"/>
</application>
</manifest>
当应用程序首次启动时,AppsFlyer SDK在manifest文件中检测到此metadata标签,并相应地将激活进行归因。
优势
The name in manifest方法被认为是对预安装广告系列进行归因的一种简便方法。Manifest中只需要添加一个标签。此外,媒体渠道或厂商不必为了衡量广告系列而做任何事情。
缺点
由于metadata标签指定了媒体渠道或厂商名称,因此您需要维护不同的APK组,每个媒体渠道或厂商一组。
在某些情况下,激活可能不会归因于预安装媒体渠道:
- 拥有新设备的用户未首次启动应用而是直接从Google Play更新预安装的应用,该激活将被视为自然激活。
- 使用新设备的用户在点击广告后会从Google Play安装该应用,该激活归因于投放广告的媒体渠道。
Path way method
注意
SDK版本4.5.0或更高版本支持。
此方法要求开发者和厂商同时执行一些操作。
开发人员
Path way方法使您可以指定包含媒体渠道或厂商名称的文件的路径。您需要完成三个步骤:
- Create a file that contains a key-value pair. The file should be called pre_install.appsflyer. In the file, specify the key-value pair in the format of <PACKAGE_NAME>=<MEDIA_SOURCE> For example,
com.appsflyer.sampleapp=my_media_source
.
传递其他预安装参数
您可以使用JSON在文件中指定其他预安装参数。例如,您可以在pre_install.appsflyer文件中添加以下键值对:
com.appsflyer.sampleapp={"pid":"huawei", "c":"special_campaign","af_adset":"some_adset"}
重要信息!
使用此选项时,请注意以下行为,这一点很重要:
- 它将“Pre-install”设置为af_channel
- 如果JSON中没有pid,则媒体渠道显示为“无”。
- 在JSON配置中,如果c参数不存在,则广告系列名称将设置为“Pre-install”
- 如果JSON格式错误,则将传递的字符串视为媒体渠道名称
拥有pre_install.appsflyer文件后,将其与APK一起提供给媒体渠道或厂商。
- 与媒体渠道或厂商联系,并就他们放置文件的路径达成一致。推荐的路径是“ /data/local/tmp/pre_install.appsflyer”。
- 商定路径后,请在manifest文件中指定路径。将以下代码段放在结束的应用程序标签之前:
<meta-data android:name="AF_PRE_INSTALL_PATH" android:value="/data/local/temp/pre_install.appsflyer" />
厂商
厂商需要将文件放在约定的路径中。pre_install.appsflyer文件许可权应设置为447。
应用启动后,SDK会在manifest文件中查找,查看指定的路径并在其中查找文件。找到它后,它将根据其中指定的媒体渠道进行激活归因。
优势
AppsFlyer在两个默认路径中查找pre_install.appsflyer文件:
/data/local/tmp/pre_install.appsflyer
OR
/etc/pre_install.appsflyer
一些厂商更喜欢将文件放在非默认路径中。在这种情况下,您可以在manifest文件中指定此非默认路径。
重要信息!
非默认路径需要SDK版本4.8或更高版本
Although non-default paths are allowed, we recommend implementing the System Properties method instead.
缺点
您需要为不同的媒体渠道或厂商维护单独的pre_install.appsflyer文件。
厂商可能希望将pre_install.appsflyer文件放在非默认路径中。在这种情况下,您需要为每个非默认路径维护单独的APK。
如果使用非默认路径,则安装可能不会归因于预安装媒体渠道:
- 拥有新设备的用户未首次启动应用而是直接从Google Play更新预安装的应用,该激活将被视为自然激活。
- 使用新设备的用户在点击广告后会从Google Play安装该应用,该激活归因于投放广告的媒体渠道。
测试预安装配置
本节演示如何测试和验证预安装配置。
重要信息!
Before you start testing, make sure to allowlist the devices you are using for testing.
Also, make sure to set the debug log to true in the AFApplication class.
AppsFlyerLib.getInstance().setDebugLog(true);
验证应用程序中的配置
提示
为避免缓存问题并获得最佳结果,建议您在构建项目之前先对其进行清理。在Android Studio中,点击上下文菜单中的Build ,然后选择Clean Project 。
在Android Studio中构建应用程序,然后将其安装在测试设备上。应用程序启动后,在Android Studio中打开Logcat,然后按“ AppsFlyer”进行过滤筛选。您应该看到带有所有详细信息的被归因的激活。请参阅以下屏幕截图:
在AppsFlyer面板中验证配置
如果配置成功,则面板中将出现归因于厂商或媒体渠道的非自然激活。激活事件也列在“预安装”广告系列下。
转到您的AppsFlyer帐户,然后打开要测试的应用程序的面板。请按照以下步骤操作:
- In the overview page, filter by media sources and choose the media source:
- In the Breakdown By Campaign graph, you can see that the install that is attributed to "my media source" comes from a Pre-install campaign:
You can also verify that the install is attributed correctly by viewing the Aggregated Performance Report. In it, you can see the media source and campaign. See screenshot below where "My Media Source" is the media source and the campaign is Pre-install:
- 对与您合作进行预安装广告系列的所有厂商或媒体渠道重复此流程。
同一台设备上的多个预安装应用
如果您在同一设备上安装的多个应用程序中有预安装广告系列,则可以使用以下四种方法来衡量归因:
- Name in manifest方法-对于每个应用程序,在每个应用程序的Manifest.xml中指定媒体渠道或厂商。
- SDK API方法-对于每个应用,请在SDK API方法中指定媒体渠道或厂商以进行预安装。
- 对于system properties或path way方法-可以在pre_install.appsflyer文件中指定应用程序及其对应的媒体渠道。每个应用程序信息应在文件中添加新的一行。例如:
com.appsflyer.tester=market_name com.newapp.newapp=market_name com.game.king=market_name
发送激活回调
If the media source or manufacturer that you collaborate with is an AppsFlyer partner, you can enable postbacks for installs.
为此,请确保媒体渠道名称与AppsFlyer配置的媒体渠道pid是相同的。
For example, if you are collaborating with market_name, its pid is market_name_int. You can see the pid by examining the attribution link of an integrated partner.
代理商
当前,代理商无法获得预安装归因。
如果af_prt(代理机构名称的参数)是预安装数据的一部分,则用户启动预安装的应用程序:
- 用户归因给代理商使用的媒体渠道(pid =)。
- 广告主可以访问完整的用户级别数据。
- 用户不会归因给代理商。
- 代理商无法访问用户级别数据。