Message to Earn (M2E)

应用内消息传递是吸引更多用户访问您的积分墙的策略方法。消息可用于定位特定用户群或货币促销。Tapjoy 的Message to Earn产品提供精细控制,可自定义消息的内容、定位和频率。或者,如果您更喜欢使用应用内消息,则可以将应用内消息深度链接到积分墙。有关如何利用这两种方式的更多详细信息,请参阅下文。

image_title

最佳实践

  • 应使用虚拟货币促销或任何类型的定位测试来设置“Message to Earn”,以最大限度地提高 Offerwall 的有效性。
  • 应在主屏幕/主菜单上显示“Message to Earn”,以向用户介绍 Offerwall。
  • 测试、测试、测试!通过 A/B 测试对 10-20% 的流量运行 M2E,以衡量 M2E 消息传递的有效性。
  • 自定义“Message to Earn”,以模仿游戏的外观和感觉。

使用Message to Earn (M2E)

Message to Earn (M2E) 广告内容是可自定义的应用内“弹出”消息,可在引导用户进入积分墙之前提供背景信息。这些消息有助于吸引更多用户访问您的积分墙。此外,它们还可以与货币促销和定向测试结合使用,以最大限度地提高其有效性。例如,您可以用以下消息定位首次使用2倍兑换比率的用户:“赢取免费金币。完成第一个广告即可获得双倍金币!”

您选择添加Message to Earn广告内容的展示位置将决定这些消息和积分墙在游戏中向用户显示的位置。M2E展示位置应设置在情境展示位置,而不是用户发起的展示位置。情境展示位置会在用户在游戏中满足特定条件后发起。

我们建议使用以下类型的展示位置设置M2E:

  • 应用打开时,主应用加载完成后
  • 货币不足弹窗/或用户放弃弹窗
  • 应用收件箱消息(如有)
  • 游戏关卡或活动结束后
  • 应用消息

了解更多关于如何添加新展示位置的信息,请访问此处

设置Message to Earn广告

实现“Message to Earn)”需要展示位置。如果您的应用尚未创建展示位置,请按照这些步骤创建展示位置。

如果您想要在已有展示位置中添加“Message to Earn”,请按照以下步骤操作。

  1. 在左侧导航栏中,选择“创建内容”。然后选择“Message to Earn”。
  2. 继续设置广告内容。
  3. 在“Message”下,您可以添加自己的自定义图片或请求Tapjoy团队创建图片。
    • 要添加自定义图片
      • 选择上传图片
      • 选择过渡类型
      • 创建自定义消息文本
  4. 在“展示位置”下,选择您希望向用户显示“Message to Earn”的展示位置。
  5. 保存

上线后,您可以在“概览”中查看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功能外,您还可以利用游戏内的内部消息功能将用户引导至积分墙。请参阅以下设置说明。

  1. 在后台中创建一个用于展示内部消息的上下文展示位置。我们建议根据展示位置的含义为其命名,例如“Custom_Popup”。有关操作说明,请参阅此处
  2. 创建积分墙广告内容,以便用户从消息中直接跳转到该积分墙。在此步骤中,请确保不要启用Message to Earn功能,这样用户就不会看到两条消息(包括游戏内消息和内部消息)。有关操作说明,请参阅此处
  3. 在您的代码中实现该展示位置。
  • 要请求展示位置,请使用TJPlacement类。确保代码中的Placement名称字符串与您在后台中设置的Placement名称完全一致(步骤1中)。

Android

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);

iOS (Objective-c)

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{}

iOS (Swift)

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!) {}

Unity

TJPlacement p = TJPlacement.CreatePlacement("APP_LAUNCH");

TJPlacement.OnRequestSuccess += HandlePlacementRequestSuccess;
TJPlacement.OnRequestFailure += HandlePlacementRequestFailure;
TJPlacement.OnContentReady += HandlePlacementContentReady;
TJPlacement.OnContentShow += HandlePlacementContentShow;
TJPlacement.OnContentDismiss += HandlePlacementContentDismiss;

React Native

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) => { });
  1. 一旦监听器方法到位,并且Placement实例化,您就可以为该Placement请求内容。

Android

if(Tapjoy.isConnected()) {
p.requestContent();
} else {
Log.d("MyApp", "Tapjoy SDK must finish connecting before requesting content.")
}

iOS (Objective-c)

[p requestContent];

iOS (Swift)

p?.requestContent()

Unity


if (Tapjoy.IsConnected()) {
    p.requestContent();
} else {
    Debug.LogWarning("Tapjoy SDK must be connected before you can request content.");
}

React Native

placement.requestContent();
  1. 请求广告内容之前,请确保Tapjoy连接调用已成功。请勿在收到 onConnectSuccess回调之前发出请求。
  2. 广告内容准备就绪后,即可展示积分墙。

Android

public void onContentReady(TJPlacement tjPlacement) {
	if(tjPlacement.isContentReady()) {
	    p.showContent();
	}
}

iOS (Objective-c)

if (p.isContentReady) {
   [p showContentWithViewController: nil];
}
else {
  //handle situation where there is no content to show, or it has not yet downloaded.
}

iOS (Swift)

if (p.isContentReady) {
    p.showContent(with: nil)
} else {
  //handle situation where there is no content to show, or it has not yet downloaded.
}

Unity

if (p.IsContentReady()) {
    p.ShowContent();
} else {
    // Code to handle situation where content is not ready goes here
}

React Native

if (placement.isContentReady()) {
   placement.showContent();
}