At a Glance: This docs is a guide about how you can integrate the Android SDK on your Apps.
将 Apptrove SDK 集成到您的应用中
使用 Gradle 添加 SDK
在模块级应用的 build.gradle 文件中,将以下代码添加到 dependencies 之前。
repositories {
mavenCentral() // Please add this code to your module level build.gradle
}
以下是截图参考:
将最新版本的 Apptrove SDK 添加为依赖项
implementation 'com.trackier:android-sdk:1.6.58' // Add this Apptrove SDK dependency in the build.gradle
另外,请查看以下部分的截图[2]以供参考。
将 Android 安装引用器添加到您的应用
将 Android Install Referrer 添加为依赖项。您可以在此处找到最新版本。
dependencies {
// 确保使用最新的 SDK 版本:
// https://mvnrepository.com/artifact/com.trackier/android-sdk
implementation 'com.trackier:android-sdk:1.6.58' // 在 build.gradle 中添加此 Apptrove SDK 依赖项
implementation 'com.android.installreferrer:installreferrer:2.2' // 在 build.gradle 中添加此安装引用器依赖项
}
同步项目以获取依赖项。以下是截图参考:
添加小米 GetApps 商店引用器
dependencies {
// ...
implementation "com.miui.referrer:homereferrer:1.0.0.6"
}
添加必要的权限
Apptrove SDK 需要在 manifest.xml 中添加以下权限。
请在您的应用项目的 manifest.xml 文件中添加以下权限(如果尚未添加)。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
以下是截图参考:
获取 Google Advertising ID
Apptrove SDK 需要从应用程序中获取广告 ID。
为实现这一点,您需要在 build.gradle 和 Manifest.xml 文件中添加一些代码,以便从应用程序中读取广告 ID,具体代码如下:
- 在您的应用 build.gradle 文件中添加 Google Advertising ID 依赖项。
dependencies {
// This can be added where the SDK dependency has been added
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
}
以下是截图参考:
- 通过添加以下权限更新您的 Android Manifest 文件。如果您的应用针对的是 Android 12 或更高版本的设备,这是必需的。
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
在 application 标签内添加元数据(如果尚未添加)。
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" /> // Add this meta-data in the manifest.xml under Application tag.
以下是 manifest.xml 文件中 application 标签的截图参考:
集成并初始化 Apptrove SDK
获取您的 SDK 密钥
要初始化 Apptrove SDK,首先需要从 Apptrove 面板生成 SDK 密钥。
以下是获取 SDK 密钥的步骤:
- 登录您的 Apptrove 面板并选择您的应用程序。
- 在仪表板中,点击面板左侧的“SDK 集成”选项。
- 在“SDK 集成”下,您将获得 SDK 密钥。
完成所有步骤后,您的 SDK 密钥将如下图所示:
在原生应用中集成 Apptrove SDK
我们建议在应用程序的全局 Application 类中初始化 SDK。这可以确保 SDK 在所有场景(包括深度链接)中完成初始化。
要在您的应用项目中初始化 SDK,请在全局 Application 类中添加初始化函数代码。
如果您的项目中没有 Application 类,请按照以下步骤操作:
- 创建一个继承自 Application 的新类。
- 打开项目应用的 AndroidManifest.xml 文件,找到
<application>
元素。 - 添加属性
android:name
,并将其设置为新创建的 Application 类的名称
在我们的 Apptrove 示例应用中,我们使用名为 MainApplication
的 Application 类。
我们按照以下方式配置了 manifest 文件:
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Exampleappjava">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
完成上述步骤后,您需要在 MainApplication
类的 onCreate()
方法中添加以下代码。
请参考以下示例代码进行 SDK 初始化:
Java
import com.trackier.sdk.TrackierSDK;
import com.trackier.sdk.TrackierSDKConfig;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
final String TR_SDK_KEY = "XXXXXXX-XXXX-XXXX-80e3-5938fadff"; // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
TrackierSDKConfig sdkConfig = new TrackierSDKConfig(this, TR_SDK_KEY,"development");
TrackierSDK.initialize(sdkConfig);
}
}
上述初始化代码的截图:
重要提示:在初始化 SDK 时,务必使用正确的 SDK 密钥。使用错误或不正确的 SDK 密钥会影响从 SDK 发送的所有流量,并导致归因和报告问题。
Kotlin
我们建议在应用程序的全局 Application 类中初始化 SDK。这可以确保 SDK 在所有场景(包括深度链接)中正确初始化。
要在您的应用项目中初始化 SDK,请在全局 Application 类中添加初始化函数代码。
如果您的项目中没有 Application 类,请按照以下步骤操作:
- 创建一个继承自 Application 的新类。
- 打开项目应用的 AndroidManifest.xml 文件,找到
<application>
元素。 - 添加属性
android:name
,并将其设置为新创建的 Application 类的名称。
在我们的 Apptrove 示例应用中,我们使用名为 MainApplication
的 Application 类。
我们按照以下方式配置了 manifest 文件:
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Exampleappkotlin">
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
完成上述步骤后,您需要在 MainApplication
类的 onCreate()
方法中添加以下代码。
请参考以下示例代码进行 SDK 初始化:
import android.app.Application
import com.trackier.sdk.TrackierSDK
import com.trackier.sdk.TrackierSDKConfig
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
val TR_SDK_KEY: String = "xxxx-xx-4505-bc8b-xx" // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
val sdkConfig = TrackierSDKConfig(this, TR_SDK_KEY, "development")
TrackierSDK.initialize(sdkConfig)
}
}
以下是 Apptrove 示例应用中上述初始化代码的截图:
重要提示:在初始化 SDK 时,务必使用正确的 SDK 密钥。使用错误或不正确的 SDK 密钥会影响从 SDK 发送的所有流量,并导致归因和报告问题。
事件跟踪
Apptrove 的事件跟踪功能能够提供用户与您的应用交互的深入洞察。通过 Apptrove SDK,您可以轻松从应用中获取这些洞察数据。只需遵循简单的事件集成流程即可。
Apptrove 在其面板上提供了内置事件和自定义事件两种选项:
内置事件 – 内置事件是一组已在仪表板上创建的常量事件列表。您可以直接使用这些事件进行跟踪,只需在应用项目中实现这些事件即可。
调用内置事件的示例代码
Java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.trackier.sdk.TrackierEvent;
import com.trackier.sdk.TrackierSDK;
public class MainActivity extends AppCompatActivity {
Button eventTrack, eventTrackWithCurrency;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eventTrack =(Button) findViewById(R.id.event_track);
eventTrack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
eventsTracking();
}
});
}
private void eventsTracking(){
// Below are the example of built-in events function calling
// The arguments - "TrackierEvent.LOGIN" passed in the Apptrove event class is Events id
TrackierEvent event = new TrackierEvent(TrackierEvent.LOGIN);
/* Below are the function for the adding the extra data,
You can add the extra data like login details of user or anything you need.
We have 10 params to add data, Below 5 are mentioned */
event.param1 = "Param 1";
event.param2 = "Param 2";
event.param3 = "Param 3";
event.param4 = "Param 4";
event.param5 = "Param 5";
TrackierSDK.trackEvent(event);
Log.d("TAG", "onClick: event_track ");
}
}
注意:Apptrove 事件类中的参数是事件 ID。
您可以将内置参数与事件集成。内置参数列表如下:
orderId, revenue, currency, param1, param2, param3 ,param4, param5, param6, param7, param8, param9, param10.
Kotlin
import android.os.*
import android.util.Log
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.trackier.sdk.TrackierEvent
import com.trackier.sdk.TrackierSDK
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_event_track = findViewById(R.id.event_track) as Button
val btn_event_curr_track = findViewById<Button>(R.id.event_curr_track)
btn_event_track.setOnClickListener {
eventsTracking()
}
}
fun eventsTracking(){
// Below are the example of built-in events function calling
// The arguments - "TrackierEvent.LOGIN" passed in the Apptrove event class is Events id.
val event = TrackierEvent(TrackierEvent.LOGIN)
/* Below are the function for the adding the extra data,
You can add the extra data like login details of user or anything you need.
We have 10 params to add data, Below 5 are mentioned */
event.param1 = "Param 1";
event.param2 = "Param 2";
event.param3 = "Param 3";
event.param4 = "Param 4";
event.param5 = "Param 5";
TrackierSDK.trackEvent(event)
Log.d("TAG", "onClick: event_track ")
}
}
注意:Apptrove 事件类中的参数是事件 ID。
您可以将内置参数与事件集成。以下是内置参数列表:
orderId, revenue, currency, param1, param2, param3 ,param4, param5, param6, param7, param8, param9, param10.
自定义事件 – 自定义事件由用户根据其业务逻辑需求创建。您可以在 Apptrove 仪表板中创建事件,并将这些事件集成到应用项目中。
调用自定义事件的示例代码
Java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.trackier.sdk.TrackierEvent;
import com.trackier.sdk.TrackierSDK;
public class MainActivity extends AppCompatActivity {
Button eventTrack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eventTrack =(Button) findViewById(R.id.event_track);
eventTrack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
customEventsTracking();
}
});
}
private void customEventsTracking(){
// Below are the example of customs events function calling
// The arguments - "sEMWSCTXeu" passed in the event class is Events id
TrackierEvent event = new TrackierEvent("sEMWSCTXeu");
/* Below are the function for the adding the extra data,
You can add the extra data like login details of user or anything you need.
We have 10 params to add data, Below 5 are mentioned */
event.param1 = "Param 1";
event.param2 = "Param 2";
event.param3 = "Param 3";
event.param4 = "Param 4";
event.param5 = "Param 5";
TrackierSDK.trackEvent(event);
Log.d("TAG", "onClick: event_track ");
}
}
Kotlin
mport android.os.*
import android.util.Log
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import com.trackier.sdk.TrackierEvent
import com.trackier.sdk.TrackierSDK
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_event_track = findViewById(R.id.event_track) as Button
val btn_event_curr_track = findViewById<Button>(R.id.event_curr_track)
btn_event_curr_track.setOnClickListener {
customEventsTrcking()
}
}
fun customEventsTrcking() {
// Below are the example of customs events function calling
// The arguments - "sEMWSCTXeu" passed in the event class is Events id
val event = TrackierEvent("sEMWSCTXeu")
/* Below are the function for the adding the extra data,
You can add the extra data like login details of user or anything you need.
We have 10 params to add data, Below 5 are mentioned */
event.param1 = "Praram Name";
event.param2 = "Param 2";
event.param3 = "Param 3";
event.param4 = "Param 4";
event.param5 = "Param 5";
TrackierSDK.trackEvent(event)
Log.d("TAG", "onClick: event_curr_track ")
}
}
收入事件跟踪
Apptrove 允许用户通过收入事件传递从应用中生成的收入数据。该功能主要用于记录应用生成的收入,同时您还可以传递货币信息。
Java
public class MainActivity extends AppCompatActivity {
Button eventTrack;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eventTrack =(Button) findViewById(R.id.event_track);
eventTrack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
revenueEventsTracking();
}
});
}
private void revenueEventsTracking(){
// Below are the example of inbuilt events function calling
// The arguments - "TrackierEvent.LOGIN" passed in the event class is Events id
TrackierEvent event = new TrackierEvent("sEMWSCTXeu");
// Passing the revenue events be like below example
event.revenue = 2.5; // Pass your generated revenue here.
event.currency = "USD"; // Pass your currency here.
TrackierSDK.trackEvent(event);
Log.d("TAG", "onClick: event_track ");
}
}
Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_event_track = findViewById(R.id.event_track) as Button
val btn_event_curr_track = findViewById<Button>(R.id.event_curr_track)
btn_event_curr_track.setOnClickListener {
revenueEventsTrcking()
}
}
fun revenueEventsTrcking() {
// Below are the example of customs events function calling
// The arguments - "sEMWSCTXeu" passed in the event class is Events id
val event = TrackierEvent("sEMWSCTXeu")
// Passing the revenue events be like below example
event.revenue = 2.5 // Pass your generateed revenue here.
event.currency = "USD" // Pass your currency here.
TrackierSDK.trackEvent(event)
Log.d("TAG", "onClick: event_curr_track ")
}
}
在事件中传递自定义参数
Java
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_event_track = findViewById(R.id.event_track) as Button
val btn_event_curr_track = findViewById<Button>(R.id.event_curr_track)
btn_event_curr_track.setOnClickListener {
revenueEventsTrcking()
}
}
fun revenueEventsTrcking() {
// Below are the example of customs events function calling
// The arguments - "sEMWSCTXeu" passed in the event class is Events id
val event = TrackierEvent("sEMWSCTXeu")
// Passing the revenue events be like below example
event.revenue = 2.5 // Pass your generateed revenue here.
event.currency = "USD" // Pass your currency here.
TrackierSDK.trackEvent(event)
Log.d("TAG", "onClick: event_curr_track ")
}
}
- 首先创建一个可变映射(mutable map)。
- 将其引用传递给事件的
event.ev
参数。 - 将事件引用传递给 TrackierSDK 的
trackEvent
方法。
将用户数据传递给 SDK
Apptrove 允许传递诸如用户 ID 和电子邮件等附加数据到 SDK,以便将这些数据与 Apptrove 的数据和日志进行关联。
只需将用户 ID、电子邮件 ID 和其他附加数据传递给 Apptrove SDK 提供的函数即可,具体如下:
Java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import com.trackier.sdk.TrackierSDK;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
Button eventTrack, eventTrackWithCurrency;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userDetails();
}
private void userDetails(){
TrackierEvent event = new TrackierEvent("sEMWSCTXeu");
TrackierSDK.setUserId("XXXXXXXX"); // Pass the UserId values here
TrackierSDK.setUserEmail("abc@gmail.com"); // Pass the user email id in the argument.
TrackierSDK.setUserName("abc");
TrackierSDK.setUserPhone("983293829");
/* Passing the additional data */
HashMap<String,Object> userDetails = new HashMap<>();
userDetails.put("Name","Sanu"); // You can pass the Username data.
userDetails.put("UserMobile","873287XXXX"); // You can pass user mobile number
TrackierSDK.setUserAdditionalDetails(userDetails);
TrackierSDK.trackEvent(event);
}
}
Kotlin
import android.os.*
import androidx.appcompat.app.AppCompatActivity
import com.trackier.sdk.TrackierSDK
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
userDetails()
}
fun userDetails(){
/* Passing the UserId and UserEmail Data */
TrackierSDK.setUserId("XXXXXXXX") // Pass the UserId values here
TrackierSDK.setUserEmail("abc@gmail.com") // Pass the user email id in the argument.
/* Passing the Additional Data */
val userAdditionalDetails: MutableMap<String,Any> = mutableMapOf()
userAdditionalDetails.put("UserName","ABC") // You can pass the Username data.
userAdditionalDetails.put("MobileNumber","8878328XXX") // You can pass user mobile number
TrackierSDK.setUserAdditionalDetails(userAdditionalDetails) // Pass the userAdditionalDetails reference in this method.
}
}
用于传递附加数据
Apptrove 允许传递附加的用户详细信息,例如用户名、手机号、用户年龄、用户性别等。您需要先创建一个哈希映射(HashMap),然后将其传递到 setUserAdditionalDetails
函数中。以下是示例:
Java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import com.trackier.sdk.TrackierSDK;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
Button eventTrack, eventTrackWithCurrency;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userDetails();
}
private void userDetails(){
HashMap<String,Object> userDetails = new HashMap<>();
userDetails.put("Name","Sanu"); // You can pass the Username data.
userDetails.put("UserMobile","873287XXXX"); // You can pass user mobile number
TrackierSDK.setUserAdditionalDetails(userDetails);
}
}
Kotlin
import android.os.*
import androidx.appcompat.app.AppCompatActivity
import com.trackier.sdk.TrackierSDK
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
userDetails()
}
fun userDetails(){
val userAdditionalDetails: MutableMap<String,Any> = mutableMapOf()
userAdditionalDetails.put("UserName","ABC") // You can pass the Username data.
userAdditionalDetails.put("MobileNumber","8878328XXX") // You can pass user mobile number.
TrackierSDK.setUserAdditionalDetails(userAdditionalDetails) // Pass the userAdditionalDetails reference in this method.
}
}
卸载跟踪
Apptrove 的卸载功能用于跟踪应用程序从设备上的卸载情况。这对于评估用户质量非常有用。
Java
private FirebaseAnalytics mFirebaseAnalytics;
FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
mFirebaseAnalytics.setUserProperty("ct_objectId", Objects.requireNonNull(TrackierSDK.getTrackierId()));
- 将上述代码添加到您的应用中以设置通用标识符。
- 将
app_remove
事件设置为 Firebase 中的转化事件。 - 使用 Firebase 云函数将卸载信息发送到 Apptrove。
- 您可以在此处找到支持文章。
延迟 SDK 启动
这是一种自定义的 SDK 初始化方式。当您需要在特定页面触发安装事件时,此功能是必需的。实现此功能后,SDK 将不会在应用程序打开时自动初始化。
Java
import android.app.Application;
import com.trackier.sdk.TrackierSDK;
import com.trackier.sdk.TrackierSDKConfig;
import java.util.HashMap;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
final String TR_SDK_KEY = "XXXXXXX-XXXX-XXXX-80e3-5938fadff"; // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
TrackierSDKConfig sdkConfig = new TrackierSDKConfig(this, TR_SDK_KEY, "development");
// Passing User Information on time of initialization
sdkConfig.setManualMode(true);
TrackierSDK.setLocalRefTrack(true, "_");
TrackierSDK.setUserId("XXXXXXXX"); // Pass the UserId values here
TrackierSDK.setUserEmail("abc@gmail.com"); // Pass the user email id in the argument.
TrackierSDK.initialize(sdkConfig);
}
}
Kotlin
import android.app.Application
import com.trackier.sdk.TrackierSDK
import com.trackier.sdk.TrackierSDKConfig
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
val TR_SDK_KEY: String = "xxxx-xx-4505-bc8b-xx" // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
val sdkConfig = TrackierSDKConfig(this, TR_SDK_KEY, "development")
sdkConfig.setManualMode(true)
TrackierSDK.setLocalRefTrack(true,"_")
TrackierSDK.initialize(sdkConfig)
// Passing User Information on time of initialization
TrackierSDK.setUserId("XXXXXXXX") // Pass the UserId values here
TrackierSDK.setUserEmail("abc@gmail.com") // Pass the user email id in the argument.
TrackierSDK.initialize(sdkConfig)
}
}
Kotlin
- 通过将布尔值
true
传递给setManualMode
方法,将手动模式设置为true
。 - 第二种方法是关联用户的电子邮件。
注意:在启用此功能之前,请确保获取 EXTERNAL_STORAGE_READ
权限。有关参考,您可以查看示例目录。
现在,您可以在需要时显式触发安装事件。
Java
TrackierSDK.fireInstall(); // Call this function on the specific Activity, wherever you want to fire the install.
Kotlin
TrackierSDK.fireInstall() // Call this function on the specific Activity, wherever you want to fire the install.
禁用自然流量跟踪
此功能用于禁用自然流量跟踪。只需调用 sdkConfig.disableOrganicTracking(true);
方法,并传递布尔值 true
。
请参考以下示例:
Java
import android.app.Application;
import com.trackier.sdk.TrackierSDK;
import com.trackier.sdk.TrackierSDKConfig;
import java.util.HashMap;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
final String TR_SDK_KEY = "XXXXXXX-XXXX-XXXX-80e3-5938fadff"; // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
TrackierSDKConfig sdkConfig = new TrackierSDKConfig(this, TR_SDK_KEY, "development");
sdkConfig.disableOrganicTracking(true); // Pass true value for disable organic tracking.
TrackierSDK.initialize(sdkConfig);
}
}
SDK 签名
以下是获取 secretId 和 secretKey 的步骤:
- 登录您的 Apptrove 面板并选择您的应用程序。
- 在仪表板中,点击左下角的三点按钮。
- 您可以在此处看到 SDK 密钥,并点击“高级”选项卡以生成 ID 和密钥。
- 点击“添加密钥”按钮以生成 ID 和密钥。
请查看以下截图:
请查看以下将 secretId 和 secretKey 传递给 SDK 的示例代码:
Java
import android.app.Application;
import com.trackier.sdk.TrackierSDK;
import com.trackier.sdk.TrackierSDKConfig;
import java.util.HashMap;
public class MainApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
final String TR_SDK_KEY = "XXXXXXX-XXXX-XXXX-80e3-5938fadff"; // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
TrackierSDKConfig sdkConfig = new TrackierSDKConfig(this, TR_SDK_KEY, "development");
sdkConfig.disableOrganicTracking(true); // Pass true value for disable organic tracking.
/* For SDK Signing */
sdkConfig.setAppSecret("xxxx","xxxx-xxx"); // Pass the secretId and secretKey
TrackierSDK.initialize(sdkConfig);
}
}
Kotlin
import android.app.Application
import com.trackier.sdk.TrackierSDK
import com.trackier.sdk.TrackierSDKConfig
import kotlin.reflect.jvm.internal.impl.load.kotlin.JvmType
class MainApplication : Application() {
override fun onCreate() {
super.onCreate()
val TR_SDK_KEY: String = "xxxx-xx-4505-bc8b-xx" // Please pass your SDK key here.
/* While Initializing the SDK, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
val sdkConfig = TrackierSDKConfig(this, TR_SDK_KEY, "development")
sdkConfig.disableOrganicTracking(true); // Pass true value for disable organic tracking/
/* For SDK Signing */
sdkConfig.setAppSecret("xxxx","xxxx-xxx") // Pass the secretId and secretKey
TrackierSDK.initialize(sdkConfig)
}
}
密钥隐藏
使用 NDK 隐藏密钥。请按照以下步骤隐藏 SDK 密钥、Secret ID 和 Secret Key:
- 在模块级 build.gradle 文件中添加插件:
id "com.klaxit.hiddensecrets" version "0.2.0"
代码如下所示:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id "com.klaxit.hiddensecrets" version "0.2.0"
}
然后,将项目与 Gradle 文件同步。当您打开 Gradle 任务时,您会看到 hideSecret
任务可用。
截图:
然后运行以下命令以隐藏密钥:
SDK 密钥:
./gradlew hideSecret -Pkey=pass_your_sdkkey -PkeyName=SDKKey
Secret Id:
./gradlew hideSecret -Pkey=pass_your_secretId -PkeyName=SecretId
Secret Key:
./gradlew hideSecret -Pkey=pass_your_secretKey -PkeyName=SecretKey
keyName
参数是可选的,默认会生成一个随机名称。您也可以提供包名称。
您将会看到 Secrets
类已添加到您的项目中:
class Secrets {
// Method calls will be added by gradle task hideSecret
// Example : external fun getWellHiddenSecret(packageName: String): String
companion object {
init {
System.loadLibrary("secrets")
}
}
external fun getSDKKey(packageName: String): String
external fun getSecretId(packageName: String): String
external fun getSecretKey(packageName: String): String
}
- 将以下内容添加到您的模块级 build.gradle 文件中:
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
然后它将如下所示:
android {
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
这将启用 C++ 文件的编译。您可以通过以下方式获取密钥:
val sdkKey = new Secrets().getSDKKey(packageName)
val secretId = new Secrets().getSecretId(packageName)
val secretKey = new Secrets().getSecretKey(packageName)
Android 深度链接
深度链接是一种技术,用户可以通过点击深度链接 URL,直接跳转到应用程序的特定页面。
深度链接分为两种类型:
- 普通深度链接 – 普通深度链接适用于用户设备上已安装您的应用程序的情况。当满足此条件时,深度链接会直接将用户重定向到链接中指定的页面。
- 延迟深度链接 – 延迟深度链接适用于用户设备上尚未安装您的应用程序的情况。在这种情况下,深度链接会先将用户引导至设备的应用商店安装应用程序。用户安装并打开应用程序后,SDK 会将他们重定向到链接中指定的页面。
请查看以下深度链接场景
普通深度链接
如果用户的设备上已安装您的应用程序,当他们与包含深度链接的追踪器交互时,应用程序将自动打开。您可以解析深度链接中的信息以便进一步使用。为此,您需要选择一个独特的 scheme 名称。
您可以设置一个特定的活动(Activity)在用户与深度链接交互时启动。具体步骤如下:
- 在您的 AndroidManifest.xml 文件中将唯一的 scheme 名称分配给活动(Activity)。
- 在活动定义中添加
intent-filter
部分。 - 为
android:scheme
属性分配您首选的 scheme 名称。
例如,您可以设置一个名为 FirstActivity
的活动,使其按如下方式打开:
AndroidManifest.xml
<activity
android:name=".Activity.FirstProduct"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="trackier.u9ilnk.me"
android:pathPrefix="/product"
android:scheme="https" />
</intent-filter>
</activity>
要在用户点击追踪器 URL 时打开您的应用程序,请将其 scheme 名称添加到 Apptrove 追踪器中作为 deep_link
参数。没有额外信息的追踪器 URL 可能如下所示:
https://trackier.u9ilnk.me/product?dlv=FirstProduct&quantity=10&pid=sms
按照上述示例操作后,当用户与 Apptrove URL 交互时,您的应用将打开,并根据示例启动 FirstProduct
活动。在 FirstProduct
类中,您将收到有关 deep_link
参数内容的信息。
SDK 会通过活动的 Intent
对象传递深度链接信息。它会使用活动的 onCreate
或 onNewIntent
方法完成此操作。一旦您启动应用并触发其中一个方法,就可以访问深度链接的内容,然后在应用的其他部分使用这些信息。
您可以通过以下方式从这些方法中提取深度链接内容:
使用 onCreate
方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.product_first);
Intent intent = getIntent();
Uri data = intent.getData();
// data.toString() -> This is your deep_link parameter value.
if (!(data == null)){
TrackierSDK.parseDeepLink(data);
}
}
使用 onNewIntent
方法:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri data = intent.getData();
// data.toString() -> This is your deep_link parameter value.
}
延迟深度链接
延迟深度链接发生在用户设备上未安装您的应用时。当用户点击 Apptrove URL 时,URL 会将其重定向到 Play 商店以下载并安装您的应用。当用户首次打开应用时,SDK 会读取 deep_link
内容。
Apptrove SDK 默认支持延迟深度链接。您只需在初始化 Apptrove SDK 后,在应用程序类中添加一些代码即可。
以下是代码示例:
import android.app.Application;
import android.content.Intent;
import androidx.annotation.NonNull;
import com.trackier.sdk.DeepLink;
import com.trackier.sdk.DeepLinkListener;
import com.trackier.sdk.TrackierSDK;
import com.trackier.sdk.TrackierSDKConfig;
public class MainApplication extends Application {
DeepLinkListener deepLinkListener=new DeepLinkListener() {
@Override
public void onDeepLinking(@NonNull DeepLink deepLink) {
if(deepLink.getDeepLinkValue().equalsIgnoreCase("DeepLinkActivity")){ //This activity/class name should be same as Apptrove unlink dlv.
Intent intent= new Intent(MainApplication.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
};
@Override
public void onCreate() {
super.onCreate();
final String TR_DEV_KEY = "XXXXXXX-XXXX-XXXX-80e3-5938fadff"; //Please pass your Development key here.
/*While Initializing the Sdk, You need to pass the three parameter in the TrackierSDKConfig.
* In First argument, you need to pass context of the application
* In second argument, you need to pass the Apptrove SDK api key
* In third argument, you need to pass the environment which can be either "development", "production" or "testing". */
TrackierSDKConfig sdkConfig = new TrackierSDKConfig(this, TR_DEV_KEY, "development");
sdkConfig.setDeepLinkListener(deepLinkListener);
sdkConfig.disableOrganicTracking(true); // Pass true value to disable organic tracking.
TrackierSDK.initialize(sdkConfig);
}
}
获取广告活动数据
要获取广告活动数据,我们提供了一个函数,该函数会返回广告活动数据。
请查看以下示例代码:
eventTrackWithCurrency.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个新的事件对象
TrackierEvent event = new TrackierEvent(TrackierEvent.UPDATE);
// 设置事件参数
event.param1 = "Param Name";
event.revenue = 0.5;
event.currency = "USD";
// 获取广告活动相关数据
String ad = TrackierSDK.getAd();
String adId = TrackierSDK.getAdID();
String camp = TrackierSDK.getCampaign();
String campID = TrackierSDK.getCampaignID();
String adSet = TrackierSDK.getAdSet();
String adSetID = TrackierSDK.getAdSetID();
String channel = TrackierSDK.getChannel();
String p1 = TrackierSDK.getP1();
String p2 = TrackierSDK.getP2();
String p3 = TrackierSDK.getP3();
String p4 = TrackierSDK.getP4();
String p5 = TrackierSDK.getP5();
String clickId = TrackierSDK.getClickId();
String dlv = TrackierSDK.getDlv();
String pid = TrackierSDK.getPid();
String isRetargetting = TrackierSDK.getIsRetargeting();
// 发送事件
TrackierSDK.trackEvent(event);
// 打印调试日志
Log.d("TAG", "onClick: eventTrackWithCurrency");
}
});
Code for kotlin
btn_event_track.setOnClickListener(View.OnClickListener {
// 创建一个新的事件对象
val event = TrackierEvent(TrackierEvent.UPDATE)
// 设置事件参数
event.param1 = "Param Name"
event.revenue = 0.5
event.currency = "USD"
// 获取广告活动相关数据
val ad: String = getAd()
val adId: String = getAdID()
val camp: String = getCampaign()
val campID: String = getCampaignID()
val adSet: String = getAdSet()
val adSetID: String = getAdSetID()
val channel: String = getChannel()
val p1: String = getP1()
val p2: String = getP2()
val p3: String = getP3()
val p4: String = getP4()
val p5: String = getP5()
val clickId: String = getClickId()
val dlv: String = getDlv()
val pid: String = getPid()
val isRetargetting: String = getIsRetargeting()
// 发送事件
trackEvent(event)
})
混淆设置
当您的应用使用 Proguard 时,必须在 Android 应用中添加此设置。请将以下代码添加到 Proguard 文件中:
-keep class com.trackier.sdk.** { *; }
-keep class com.google.android.gms.common.ConnectionResult {
int SUCCESS;
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient {
com.google.android.gms.ads.identifier.AdvertisingIdClient$Info getAdvertisingIdInfo(android.content.Context);
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info {
java.lang.String getId();
boolean isLimitAdTrackingEnabled();
}
-keep public class com.android.installreferrer.** { *; }