请参阅我们的 Release Notes 以查看详细的版本历史记录。

关于 Unity 的特定说明,请查看 https://github.com/tenjin/tenjin-unity-sdk。

Tenjin Android SDK (v1.9.3) (132KB) - 对 Google Play 和 Amazon Store 的支持

在我们推荐使用最新版本的 Android Studio 进行 SDK 集成。

清单文件 Manifest requirements:

  • 在 manifest tags 中包含 INTERNET 权限
  • 在 application tags 中包含 Google Play Services
<manifest>
  ...
  <uses-permission android:name="android.permission.INTERNET"></uses-permission>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- Required to get network connectivity (i.e. wifi vs. mobile) -->
  ...
</manifest>

SDK 集成:

Android Studio 集成

  1. 这里系在最新的 Android SDK。
  2. 添加 tenjin.jar 到您的 Android Studio project, 选择 New > Module。
  3. 在 New Module 对话框中,选择导入 .JAR 或 .AAR Package 选项,然后点击下一步。 AndroidStudio
  4. 选择 tenjin.jartenjin.aar 文件并点击完成。
  5. 如果您尚未安装 Google Play Services, 请添加到 build.gradle 文件, 从 Tenjin Android SDK v1.8.3开始,您需要添加 Google's Install Referrer Library
    dependencies {
    implementation 'com.google.android.gms:play-services-analytics:17.0.0'
    implementation 'com.android.installreferrer:installreferrer:1.1.2'
    }
    
  6. In your app module's build.gradle file, make sure to add this into the dependencies block:
    dependencies {
    compile project(":tenjin")
    }
    

    Eclipse 集成:

  7. 这里下载最新的 Android SDK。
  8. 在 project's root folder 下创建 libs 文件夹。
  9. 复制 tenjin.jar 文件到 libs 文件夹。
  10. 右键点击 tenjin.jar 后选择 Build Path -> Add to Build Path
  11. 这可以在 project 中创建一个 Referenced Libraries 的文件夹
  12. 从 SDK Manager 中安装 Google 的 Android Support Repository, Android Support Library, Google Play ServicesGoogle Repository SDK。 Google 概述了如果进行 最佳配置

代码集成 Code Integration:

  1. Tenjin Organization 标签页拿到您的 API_KEY
  2. 在主要 main Activity 中包含 import com.tenjin.android.TenjinSDK; 的 Tenjin SDK。

3a. 在 onResume 方法中,您的 main Activity class 需要添加如下代码:

TenjinSDK instance = TenjinSDK.getInstance(this, "<API_KEY>");
instance.connect();

Or similarly here's an example of what the Activity integration(s) should look like:

import com.tenjin.android.TenjinSDK;
import com.tenjin.android.Callback;

public class TenjinDemo extends ActionBarActivity {

    @Override
    public void onResume() {
        //standard code
        super.onResume()

        //Integrate TenjinSDK connect call
        String apiKey = "<API_KEY>";
        TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
        instance.connect();

        //Your other code...
        //...

    }
}

3b. 另一种初始化可以处理其他服务中的深度链接。 (请勿同时使用 3a 和 3b,选择一个即可.) 如果您使用其他服务产生延迟的深度链接,您可以向 Tenjin 发送这个链接,来处理已经已经打开 Tenjin 归因的深度链接。

import com.facebook.applinks.AppLinkData;

import com.tenjin.android.TenjinSDK;

public class TenjinDemo extends ActionBarActivity {

    @Override
    public void onResume() {
        //standard code
        super.onResume()

        //Integrate TenjinSDK connect call
        String apiKey = "<API_KEY>";
        TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);

        String appLinkUri = "your_deeplink";
        if (appLinkUri){
          instance.connect(appLinkUri);
        } else {
          instance.connect();
        }

        //Your other code...
        //...

    }
}

您可以通过 Live Test Device Data Tool.来验证集成是否正常运行。 添加 advertising_id 或者 IDFA/GAID 到测试设备列表中。你可以在 Support -> Test Devices找到内容。转到 SDK Live page 然后从 App 发送测试事件,您可以看到即时的数据如下:

Tenjin 和 GDPR:

作为 GDPR 合规的一部分,使用 Tenjin 的 SDK,您可以选择加入和退出设备/用户,或选择要加入或退出的特定于设备的相关参数。OptOut() 不会向 Tenjin 发送任何 API 请求,我们也不会处理任何事件。

To opt-in/opt-out:

import com.tenjin.android.TenjinSDK;

public class TenjinDemo extends ActionBarActivity {

    @Override
    public void onResume() {
        //standard code
        super.onResume()

        //Integrate TenjinSDK connect call
        String apiKey = "<API_KEY>";
        TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);

        boolean userOptIn = checkOptInValue();

        if (userOptIn) {
            instance.optIn();
        }
        else {
            instance.optOut();
        }

        instance.connect();

        //Your other code...
        //...

    }

    protected boolean checkOptInValue(){
        // check opt-in value
        // return true; // if user opted-in
        return false;
    }
}

要选择加入/退出特定的设备相关参数,可以使用 OptInParams()OptOutParams()OptInParams() 将仅发送指定的设备相关参数. OptOutParams() 将发送除指定参数外的所有与设备相关的参数。 请注意,我们需要至少 ip_address, advertising_id, developer_device_id, limit_ad_tracking, referrer (Android), 和 iad (iOS) 来正确地跟踪在 Tenjin 系统中的设备。如果您打算使用 Google,则还需要添加: platform, os_version, locale, device_model, 和 build_id.

如果只想使用 OptInParams()获取与设备相关的特定参数,在下面的样例中, 我们只发送这些设备相关的参数: ip_address, advertising_id, developer_device_id, limit_ad_tracking, referrer, 和 iad:

String apiKey = "<API_KEY>";
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);

String[] optInParams = {"ip_address", "advertising_id", "developer_device_id", "limit_ad_tracking", "referrer", "iad"};
instance.optInParams(optInParams);

instance.connect();

如果要使用 OptOutParams()发送除特定设备相关参数以外的所有参数,如下样例中,我们会发送除了 locale, timezone, 和 build_id 之外的所有相关的参数。

String apiKey = "<API_KEY>";
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);

String[] optOutParams = {"locale", "timezone", "build_id"};
instance.optOutParams(optOutParams);

instance.connect();

设备相关参数

参数 描述 索引
ip_address IP 地址
advertising_id 设备Advertising ID Android)
limit_ad_tracking 开启限制广告追踪 Android)
platform platform Android
referrer Google Play Install Referrer Android
os_version 操作系统版本 Android
device 设备名称 Android
device_manufacturer 设备生产厂商 Android
device_model 设备型号 Android
device_brand 设备品牌 Android
device_product 设备产品 Android
carrier 手机运营商 Android)
connection_type 移动数据或 wifi Android)
screen_width 设备屏幕宽度 Android
screen_height 设备屏幕高度 Android
os_version_release 操作系统版本 Android
build_id build ID Android
locale device locale Android)
country 区域国家 Android)
timezone 时区 Android

App 购买相关的事件集成说明:

理解用户收入和购买行为,开发者可以发送 transaction 事件到 Tenjin,一共有两种方式

  1. 验证收据 Validate receipts Tenjin 可以为您验证 transaction

重要提示: 您需要添加 App 的 public key 到 Tenjin dashboard > Your Android App > Edit. 您可以从 Google Play Developer Console > Select your app > Development Tools > Services & APIs. 获得您的 Base64-encoded RSA public key。

Dashboard

在 Tenjin 控制面板输入 Public Key 后,您可以使用以下 Tenjin SDK 方法:

public void transaction(String productId, String currencyCode, int quantity, double unitPrice, String purchaseData, String dataSignature)

Example:


public void sendPurchaseEvent(Purchase purchase, Double price, String currencyCode) {
        String sku = purchase.getSku();
        String purchaseData = purchase.getOriginalJson();
        String dataSignature = purchase.getSignature();

        TenjinSDK instance = getTenjinInstance();
        instance.transaction(sku, currencyCode, 1, price, purchaseData, dataSignature);
}

您可以通过我们的Live Test Device Data Tool来验证内购核实是否正常运行. 实时数据详见:

  1. 手动传递交易 (通常发生在交易不是通过 Google Play 进行的情况下) 发送 transaction 事件,您需要提供 productId, currencyCode, quantity, 和 unitPrice。 用户交易签名方法如下 public void transaction(String productId, String currencyCode, int quantity, double unitPrice).

以下是的为示例:

//The developer's own method for completing a transaction that happened in app
public void completeTransaction(String productId, String currencyCode, int quantity, double unitPrice){
  ...
  //Call the Tenjin SDK with the context and the API_KEY
  TenjinSDK.getInstance(this, "<API_KEY>").transaction(productId, currencyCode, quantity, unitPrice);
  ...
}
  • productId -> Name or ID of the product that you're selling
  • currencyCode -> Currency code of the price
  • quantity -> Number of transactions that you are doing on this event
  • unitPrice -> Unit price of a single transaction

Tenjin将基于交易计算总收益 quantity*unitPrice Tenjin将记录和跟踪基础上,通过货币代码,数量和发送单价计算收入。

Tenjin 自定义事件集成说明:

使用 Tenjin SDK 传递自定义事件: eventWithName(String name).

通过 Tenjin 您可以通过自定义事件绑定不同获客渠道的级别成本,示例如下:

String apiKey = <API_KEY>;
TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);

//Integrate a custom event with a distinct name - ie. swiping right on the screen
instance.eventWithName("swipe_right");

自定义事件需为整数:

重要提示:请不要在 CONNECT/INITIALIZATION 事件之前发送自定义事件. 必须先进行初始化,然后再发送自定义事件。

使用 Tenjin SDK 传递自定义事件: eventWithNameAndValue(String name, String value) 或者 eventWithNameAndValue(String name, int value).

发送一个有 name的整数 value,可以让营销人员汇总和跟踪控制面板上的平均值。如果您计划使用 Datavault,这些数值可以被用在更多有用的的指标上。

String apiKey = <API_KEY>;
TenjinSDK.instance = TenjinSDK.getInstance(this, apiKey);

//Integrate a custom event with a distinct name and value - ie. paying 100 virtual coins for an item
instance.eventWithNameAndValue("item", "100");

使用以上样例,控制面板可以汇总并给出所有名为item的事件平均值。请留意如果此数值不是整数,数值将不会被记录。

Tenjin 延迟深度链接(deferred deeplink)集成说明:

通过 Tenjin 生成的广告活动追踪链接(campaign tracking URLs),有将用户指向 App 特定部分的功能。您可以利用 getDeeplink 和回传的方法获得延迟的深度链接,这里有详细的说明 here.

import com.tenjin.android.TenjinSDK;
import com.tenjin.android.Callback;

public class TenjinDemo extends ActionBarActivity {

    //...other callbacks are here

    @Override
    public void onResume() {
        //standard code
        super.onResume()

        //Integrate TenjinSDK connect call
        String apiKey = "<API_KEY>";
        TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
        instance.connect();

        instance.getDeeplink(new Callback() {
            @Override
            public void onSuccess(boolean clickedTenjinLink, boolean isFirstSession, Map<String, String> data) {
                if (clickedTenjinLink) {
                    if (isFirstSession) {
                        if (data.containsKey(TenjinSDK.DEEPLINK_URL)) {
                           // use the deferred_deeplink_url to direct the user to a specific part of your app
                        }
                    }
                }
            }
        });

        //Your other code...
        ...

    }

您也可以通过查看 isFirstSession param 使用 v1.7.1+ SDK 来处理安装后的逻辑。比如,您有一个付费的 App,可以通过以下方式来注册已经安装的付费 App:

import com.tenjin.android.TenjinSDK;

public class TenjinDemo extends ActionBarActivity {

    //...other callbacks are here

    @Override
    public void onResume() {
        //standard code
        super.onResume()

        //Integrate TenjinSDK connect call
        String apiKey = "<API_KEY>";
        TenjinSDK instance = TenjinSDK.getInstance(this, apiKey);
        instance.connect();

        instance.getDeeplink(new Callback() {
            @Override
            public void onSuccess(boolean clickedTenjinLink, boolean isFirstSession, Map<String, String> data) {
                if (isFirstSession) {
                  // send paid app price and revenue to Tenjin
                }
            }
        });

        //Your other code...
        ...

    }

ProGuard Settings:

-keep class com.tenjin.** { *; }
-keep public class com.google.android.gms.ads.identifier.** { *; }
-keep public class com.google.android.gms.common.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}
-keepattributes *Annotation*

用于 A/B 测试的 App Subversion 参数(需要使用 DataVault)

如果您想运行 A/B 测试和差异报告,我们可以使用 appendAppSubversion 方法将数字值附加到您的应用程序版本中。例如,如果您的应用程序版本 1.0.1 设置了 appendAppSubversion: @8888,报告中将为1.0.1.8888

这些数据将在 DataVault 中,您可以通过 subversion 值来运行报告。

TenjinSDK instance = TenjinSDK.getInstance(this, "<API_KEY>");
instance.appendAppSubversion(8888);
instance.connect();

results matching ""

    No results matching ""