高级选项

文件

高级选项

在旧设备上收集安装 Referrer

注意:Google 正在淘汰 install_referrer 意向广播。请参阅:还在使用 InstallBroadcast?在 2020 年 3 月 1 日前切换到播放推荐人 API

安装推荐人是 Singular 确定归属的最准确工具,此外还能帮助 Singular 检测和分析欺诈企图。它是 Google Play 商店提供的标识符,指向用户在安装应用程序之前点击的广告。

在安装了最新版 Google Play Store 的设备上,Singular SDK 会自动收集安装推荐值(因为 Singular 已集成了最新的Google Play Referrer API)。

在旧版设备上收集安装推荐人:

如果您已有安装推荐人接收器:

你的应用程序很可能已经有了一个广播接收器(BroadcastReceiver),可以接收来自 Android 的 INSTALL_REFERRER。

如果是这样,只需在 BroadcastReceiver 的onReceive方法中添加以下一行即可:

java
new SingularInstallReceiver().onReceive(context, intent);

例如,如果您现有的接收器名为 MyCustomInstallReceiver,它应该如下所示:

java
public class MyCustomInstallReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Pass install referrer information on to Singular

        new SingularInstallReceiver().onReceive(context, intent);
        // ...

    }
}

如果没有其他安装推荐接收器:

如果你的应用程序中没有任何安装推荐器接收器,只需在清单文件中的 <application> 标签中添加以下内容,即可让 Singular SDK 注册唯一的接收器:

xml
<receiver android:exported="true" android:name="com.singular.sdk.SingularInstallReceiver">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
    </intent-filter>
</receiver>

手动管理会话

对于 Android API 14(冰淇淋三明治)及以上版本,Singular SDK 可以自动处理会话管理。如果你的应用程序的 minSdkVersion 是 14 或更高,则无需为会话管理进行额外配置。

修改会话超时

默认情况下,如果应用程序在后台运行 60 秒或更长时间后才返回前台,SDK 就会注册一个新会话。

要更改超时值,请在初始化 SDK 前在SingularConfig中使用withSessionTimeoutInSec(<timeout in seconds>)

例如

java
// Set the session timeout to 120 seconds

SingularConfig config = new SingularConfig("SDK KEY", "SDK SECRET")
.withSessionTimeoutInSec(120); 

手动会话管理

如果你的应用程序的 minSdkVersion 低于 14,你需要通过调用 Singular's SDK 的两个会话处理方法(onActivityPausedonActivityResumed)来手动管理会话。

注: 如果你有一个自定义的通用基础活动类,所有其他活动都是从该类派生出来的,那么你可以将这些对 onActivityResumed 和 onActivityPaused 的调用放在通用活动的 "onResume 和 onPause 方法 "中。

Singular.onActivityResumed 方法
说明 在活动的 onResume 方法中调用此方法来管理 Singular 会话。
签名 public static void onActivityResumed()
使用示例
java
@Override
protected void onResume() {
    super.onResume();
    Singular.onActivityResumed();
    .... //other code if any
}
Singular.onActivityPaused 方法
说明 在活动的 onPause 方法中调用此方法来管理 Singular 会话。
签名 public static void onActivityPaused()
使用示例
java
@Override
protected void onPause() {
    super.onPause();
    Singular.onActivityPaused();
    .... //other code if any
}

使用 JavaScript 接口

Singular 提供了一个 JavaScript 接口,你可以用它在应用程序的 javaScript 代码中调用 Singular。

例如,如果设置了 JavaScript 接口,就可以通过 JavaScript 代码向 Singular 发送以下事件:

事件示例

javascript
SingularInterface.event('event');
SingularInterface.event('test',
    JSON.stringify({"a1":"bar", "a2":"boo", "a3":"baz"}));

该接口支持以下 SDK 方法:

  • 设置客户用户 ID
  • unsetCustomUserID
  • 事件
  • 收入

要启用 JavaScript 界面,请在主活动中添加以下代码行,其中 "myWebView "是 webview 的名称。

java
SingularJSInterface singularJSInterfaceInstance = new SingularJSInterface(this);
singularJSInterfaceInstance.setWebViewId(R.id.webview);
myWebView.addjavascriptInterface(singularJSInterfaceInstance, "SingularInterface");

注意:

  • 如果您有多个网络视图,请为每个视图都添加此代码。
  • 我们建议将代码放在应用程序的 onCreate 方法中。

您的 onCreate 方法可能如下所示:

java
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    WebView myWebView = (WebView) this.findViewById(R.id.webview);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setjavaScriptEnabled(true);
    myWebView.loadUrl("file:///android_asset/index.html");

    SingularConfig config = new SingularConfig("SDK KEY", "SDK SECRET");
    Singular.init(this, config);
    SingularJSInterface singularJSInterfaceInstance = 
        new SingularJSInterface(this);
    singularJSInterfaceInstance.setWebViewId(R.id.webview);
    myWebView.addjavascriptInterface(singularJSInterfaceInstance,
        "SingularInterface");
}

收集 OAID(开放广告 ID)

在不使用 Google Play 的国家/地区,安卓设备没有谷歌广告 ID(GAID,在 Singular 中也称为 AIFA)。取而代之的是,设备可以提供一种名为 OAID(开放式广告标识符)的标识符,用于跟踪来自设备的会话和事件。

目前,华为和属于移动安全联盟(MSA)的品牌都在设备上提供 OAID。

您的应用程序要收集 OAID,首先必须集成MSA SDK华为 OAID SDK。您需要集成这两个 SDK,才能在所有提供 OAID 的平台上收集 OAID。

然后,要告诉 Singular SDK 使用 OAID 进行跟踪,请在初始化 Singular 之前,在配置对象中添加对withOAIDCollection的调用。

java
SingularConfig config = new SingularConfig("SDK KEY","SDK SECRET")
    .withOAIDCollection();
Singular.init(context, config);

Singular SDK 会自动检测设备是否有 OAID,以及应使用哪个 OAID SDK 收集标识符。


收集 IMEI 号码

如果您的应用程序在不使用 Google Play 的国家/地区发布,那么设备就没有 Google Advertising ID。在这种情况下,您可能需要收集设备的 IMEI(国际移动设备识别码)。

注意:如果使用 Google Play 服务,则不应收集 IMEI 号码,因为这违反了 Google Play 服务协议。

要收集 IMEI 号码

在应用程序的 AndroidManifest.xml 文件中添加android.permission.READ_PHONE_STATE权限:

xml
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

添加如下代码,以获取设备的 IMEI 号码:

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

String imei = null;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    imei = telephonyManager.getImei();
} else {
    imei = telephonyManager.getDeviceId();
}

要向 Singular 发送 IMEI 号码,请使用以下方法之一:

建议使用 在初始化 Singular SDK 之前,使用withIMEISingularConfig中设置 IMEI 号码,如下例所示。这样,Singular 就可以从第一次会话开始使用 IMEI 号码。

java
SingularConfig config = new SingularConfig("SDK KEY","SDK SECRET")
  .withIMEI("537769845792516");
Singular.init(context, config);

要在 SDK 初始化后的任何代码中设置 IMEI 号码,请调用setIMEI

Singular.setIMEI 方法
说明 向 Singular 发送设备的 IMEI 号码。
签名 public void setIMEI(string IMEIString)
使用示例
java
Singular.setIMEI(IMEIString);