请参阅我们的 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 集成
- 这里是最新的 Android SDK。
- 添加 tenjin.jar 到您的 Android Studio project, 选择 New > Module。
- 在 New Module 对话框中,选择导入 .JAR 或 .AAR Package 选项,然后点击下一步。
- 选择
tenjin.jar
或tenjin.aar
文件并点击完成。 - 如果您尚未安装 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' }
- In your app module's build.gradle file, make sure to add this into the dependencies block:
dependencies { compile project(":tenjin") }
Eclipse 集成:
- 在 这里下载最新的 Android SDK。
- 在 project's root folder 下创建
libs
文件夹。 - 复制
tenjin.jar
文件到libs
文件夹。 - 右键点击
tenjin.jar
后选择Build Path
->Add to Build Path
- 这可以在 project 中创建一个
Referenced Libraries
的文件夹 - 从 SDK Manager 中安装 Google 的
Android Support Repository
,Android Support Library
,Google Play Services
和Google Repository
SDK。 Google 概述了如果进行 最佳配置 。
代码集成 Code Integration:
- 在 Tenjin Organization 标签页拿到您的
API_KEY
。 - 在主要 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,一共有两种方式
- 验证收据 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。
在 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来验证内购核实是否正常运行. 实时数据详见:
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();