应用内消息传递是吸引更多用户访问您的积分墙的策略方法。消息可用于定位特定用户群或货币促销。Tapjoy 的Message to Earn产品提供精细控制,可自定义消息的内容、定位和频率。或者,如果您更喜欢使用应用内消息,则可以将应用内消息深度链接到积分墙。有关如何利用这两种方式的更多详细信息,请参阅下文。
Message to Earn (M2E) 广告内容是可自定义的应用内“弹出”消息,可在引导用户进入积分墙之前提供背景信息。这些消息有助于吸引更多用户访问您的积分墙。此外,它们还可以与货币促销和定向测试结合使用,以最大限度地提高其有效性。例如,您可以用以下消息定位首次使用2倍兑换比率的用户:“赢取免费金币。完成第一个广告即可获得双倍金币!”
您选择添加Message to Earn广告内容的展示位置将决定这些消息和积分墙在游戏中向用户显示的位置。M2E展示位置应设置在情境展示位置,而不是用户发起的展示位置。情境展示位置会在用户在游戏中满足特定条件后发起。
我们建议使用以下类型的展示位置设置M2E:
了解更多关于如何添加新展示位置的信息,请访问此处。
实现“Message to Earn)”需要展示位置。如果您的应用尚未创建展示位置,请按照这些步骤创建展示位置。
如果您想要在已有展示位置中添加“Message to Earn”,请按照以下步骤操作。
上线后,您可以在“概览”中查看M2E广告内容。如果 M2E广告内容效果不佳,请考虑设置 A/B 测试 来测试不同的消息和定位。
以下功能可与M2E广告结合使用。
货币促销 - 使用Message to Earn功能个性化您的货币促销,以提高促销的知名度。创建说明请参见此处。 定位 - 使用个性化消息定位特定的用户群体。常见示例包括: - 向首次使用过 Offerwall 的用户 - 鼓励X天内未完成广告的用户 - 提醒X天内未登录Offerwall的用户 - 重新吸引处于Offerwall活动期间(例如 3/7)的用户 - 了解更多关于 Tapjoy 定位工具的信息:用户标签、广告行为定位 或 用户群组。 A/B 测试 - 为了优化您向用户传达的信息,您可以运行 A/B 测试,通过数据验证最有效的文案。 - 创建广告内容时,请启用A/B测试。 - 在A/B测试下,选择“Add a Variant”。为每个变量上传不同的图片和信息。 - 完成广告内容创建并点击“保存”。 - 了解更多关于Tapjoy A/B测试工具的信息,请访问 此处。
除了Message to Earn功能外,您还可以利用游戏内的内部消息功能将用户引导至积分墙。请参阅以下设置说明。
TJPlacementListener placementListener = this;
TJPlacement p = Tapjoy.getPlacement("[PLACEMENT_NAME]", placementListener);
// Listeners
public void onRequestSuccess(TJPlacement placement);
public void onRequestFailure(TJPlacement placement, TJError error);
public void onContentReady(TJPlacement placement);
public void onContentShow(TJPlacement placement);
public void onContentDismiss(TJPlacement placement);
TJPlacement *p = [TJPlacement placementWithName:@"Main Menu" delegate:self];
// Callbacks
- (void)requestDidSucceed:(TJPlacement*)placement{}
- (void)requestDidFail:(TJPlacement*)placement error:(NSError*)error{}
- (void)contentIsReady:(TJPlacement*)placement{}
- (void)contentDidAppear:(TJPlacement*)placement{}
- (void)contentDidDisappear:(TJPlacement*)placement{}
let p = TJPlacement(name: "Main Menu", delegate: self)
// Callbacks
func requestDidSucceed(_ placement: TJPlacement!) {}
func requestDidFail(_ placement: TJPlacement!, error: Error!) {}
func contentIsReady(_ placement: TJPlacement!) {}
func contentDidAppear(_ placement: TJPlacement!) {}
func contentDidDisappear(_ placement: TJPlacement!) {}
TJPlacement p = TJPlacement.CreatePlacement("APP_LAUNCH");
TJPlacement.OnRequestSuccess += HandlePlacementRequestSuccess;
TJPlacement.OnRequestFailure += HandlePlacementRequestFailure;
TJPlacement.OnContentReady += HandlePlacementContentReady;
TJPlacement.OnContentShow += HandlePlacementContentShow;
TJPlacement.OnContentDismiss += HandlePlacementContentDismiss;
let placement = new TJPlacement("Placement Name");
placement.on(TJPlacement.REQUEST_DID_SUCCEED, (placement: TJPlacement) => { });
placement.on(TJPlacement.REQUEST_DID_FAIL, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_IS_READY, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_DID_APPEAR, (placement: TJPlacement) => { });
placement.on(TJPlacement.CONTENT_DID_DISAPPEAR, (placement: TJPlacement) => { });
if(Tapjoy.isConnected()) {
p.requestContent();
} else {
Log.d("MyApp", "Tapjoy SDK must finish connecting before requesting content.")
}
[p requestContent];
p?.requestContent()
if (Tapjoy.IsConnected()) {
p.requestContent();
} else {
Debug.LogWarning("Tapjoy SDK must be connected before you can request content.");
}
placement.requestContent();
public void onContentReady(TJPlacement tjPlacement) {
if(tjPlacement.isContentReady()) {
p.showContent();
}
}
if (p.isContentReady) {
[p showContentWithViewController: nil];
}
else {
//handle situation where there is no content to show, or it has not yet downloaded.
}
if (p.isContentReady) {
p.showContent(with: nil)
} else {
//handle situation where there is no content to show, or it has not yet downloaded.
}
if (p.IsContentReady()) {
p.ShowContent();
} else {
// Code to handle situation where content is not ready goes here
}
if (placement.isContentReady()) {
placement.showContent();
}