动态运营LiveOps #
LiveOps 功能的响应并不总是即时的。我们并不能保证每一次都能在指定时间内获得确认应答。因此,如若未能及时收到响应,敬请您实施重试逻辑(retry logic)以获得更好的效果。
在Tenjin中,您可以根据用户归因来源设置自定义用户旅程。这为改进和更具创新性的应用内体验提供了一系列不同的机会。
场景1: 为来自特定广告活动(例如交叉推广活动)的用户提供游戏内奖励。
场景2: 根据用户是来自买量还是自然量,设置不同的用户流程(如引导、变现等)
LiveOps Campaigns 如何运作? #
在Tenjin服务器上处理了归因数据之后,可以根据请求将数据返回给客户端(应用)。然后,应用会处理数据并根据需要显示应用内内容。
Tenjin仅负责此工作流程的数据传输部分。应用内内容的动态替换由应用开发者负责。
我可以将哪些归因数据传递给应用? #
如果可用,以下参数可以传递回应用:
| 参数 | 说明 | 返回值示例 |
advertising_id | 设备的广告ID | 11de7924d076456d9a203c8dee56632a |
ad_network | Campaign的广告渠道 | mintegral |
campaign_id | Tenjin campaign ID | 6ebd3332-68f8-4919-875c-73fe6780d4f7 |
campaign_name | Tenjin的Campaign名称,或来自广告渠道的Campaign名称(如果广告渠道通过归因链接或API将Campaign名称传递给Tenjin,包括所有主要渠道:Meta、Google、Tiktok、Axon by Applovin等) | mtg_us_1103 |
site_id | 子渠道ID | mtg_1256527 |
creative_name | 来自广告渠道的素材名称 | video_123 |
remote_campaign_id | 广告渠道Campaign ID | ss_mtg_US_1123 |
deferred_deeplink_url | 延迟深度链接 | |
click_id | 广告渠道点击ID | mtg65cebc77cddec80001c17f4w |
analytics_installation_id | Tenjin生成的应用安装ID | f024e65f3dd94f16983726bcef192d68 |
以下是返回数据的示例:
JSON
{"referrer":"utm_source=(not%20set)&utm_medium=(not%20set)","referrer_params":{"utm_source":"(not set)","utm_medium":"(not set)"},"advertising_id":"00000000000000000000000000000000","ad_network":"ironsource","campaign_id":"f92aa3f1-8f2c-4110-ac2c-37c9a39618c4","campaign_name":"T1_ALL","site_id":"23445433","creative_name":"trees_playing_football"}我需要如何设置LiveOps Campaigns? #
您需要以下内容:
- 成功集成Tenjin SDK 1.12.19+
- 请确保在每次应用启动时都初始化 Tenjin SDK:
- 对于Android,在主Activity的onResume中调用instance.connect();
- 对于Unity插件,在Application的onStart和onApplicationPause中调用instance.connect();
集成示例– iOS:
Objective-C
[[TenjinSDK sharedInstance]
getAttributionInfo:^(NSMutableDictionary *attributionInfo) {
NSLog(@"TenjinSDK getAttributionInfo result: %@", attributionInfo);
// Extract individual parameters
NSString *advertisingId = attributionInfo[@"advertising_id"];
NSString *adNetwork = attributionInfo[@"ad_network"];
NSString *campaignId = attributionInfo[@"campaign_id"];
NSString *campaignName = attributionInfo[@"campaign_name"];
NSString *siteId = attributionInfo[@"site_id"];
NSString *creativeName = attributionInfo[@"creative_name"];
NSString *deferredDeeplinkUrl = attributionInfo[@"deferred_deeplink_url"];
}]
;集成示例– Android:
Java
import com.tenjin.android.Callback;
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.getAttributionInfo(new Callback() {
@Override
public void onSuccess(Map<String, String> data) {
if (data.containsKey(TenjinConsts.ATTR_PARAM_ADVERTISING_ID)) {
// Advertising ID of the device
}
if (data.containsKey(TenjinConsts.ATTR_PARAM_AD_NETWORK)) {
// Ad Network of the campaign
}
if (data.containsKey(TenjinConsts.ATTR_PARAM_CAMPAIGN_ID)) {
// Tenjin campaign ID
}
if (data.containsKey(TenjinConsts.ATTR_PARAM_CAMPAIGN_NAME)) {
// Tenjin campaign name
}
if (data.containsKey(TenjinConsts.ATTR_PARAM_SITE_ID)) {
// Tenjin Site ID
}
if (data.containsKey(TenjinConsts.ATTR_PARAM_CREATIVE_NAME)) {
// Tenjin creative name
}
}
});
}
}
集成示例 – Unity:
Objective-C
BaseTenjin instance = Tenjin.getInstance("<SDK_KEY>");
instance.GetAttributionInfo((Dictionary<string, string> attributionInfoData) => {
// Extract individual parameters
string advertisingId = GetValueOrDefault(attributionInfoData, "advertising_id");
string adNetwork = GetValueOrDefault(attributionInfoData, "ad_network");
string campaignId = GetValueOrDefault(attributionInfoData, "campaign_id");
string campaignName = GetValueOrDefault(attributionInfoData, "campaign_name");
string siteId = GetValueOrDefault(attributionInfoData, "site_id");
string creativeName = GetValueOrDefault(attributionInfoData, "creative_name");
string deferredDeeplinkUrl = GetValueOrDefault(attributionInfoData, "deferred_deeplink_url");
});