开发指南
准备工作
接入前请联系平台同事确认 XDConfig.json 的最新参数。
对应平台的接入准备请参考 接入细节。
【必须】一、打开推送权限
iOS 上接入推送模块,必须每次启动后都使用该接口打开推送权限,否则可能无法收到推送,请在合适的时机调用该接口。
如果是首次调用系统会展示相应的权限框让用户自行选择是否打开推送,用户选择打开才能收到推送,如果选择关闭则无法收到。用户选择后游戏内再调用该接口不会再提示用户。
Android 从版本 13 开始需要通过代码打开推送权限,可以参考下述代码示例。Android 13 以下没有主动打开推送权限的方式,且根据厂商可能有不同表现,包括但不限于默认关闭。
- Android
- iOS
- Unity
- UE
[XDGPush registerPushWithHandler:^(BOOL success) {
if (success) {
// 推送打开
} else {
// 推送关闭,可以根据需求引导用户去设置中开启推送
}
}];
暂无
#if PLATFORM_IOS
FXDGPush::RegisterPushWithHandler(FXDGPush::FHandlerRegisteredDelegate::CreateLambda([Printer, this](bool success)
{
if (success) {
// 推送打开
} else {
// 推送关闭,可以根据需求引导用户去设置中开启推送
}
}));
#elif PLATFORM_ANDROID
TArray<FString> AndroidPermission;
AndroidPermission.Add(TEXT("android.permission.POST_NOTIFICATIONS"));
UAndroidPermissionFunctionLibrary::AcquirePermissions(AndroidPermission);
#endif
【可选】二、设置推送回调,获取推送内容
如果游戏想获取玩家收到的推送内容,可以设置全局回调,在用户点击推送时会触发回调返回推送内容。
- Android
- iOS
- Unity
- UE
// PushActivity.java
import androidx.annotation.Nullable;
import com.xd.sdk.push.XDGPush;
import com.xd.sdk.push.callback.XDGPushCallback;
import java.util.Map;
// ...
private void setPushCallback() {
XDGPush.setPushCallback(new XDGPushCallback() {
@Override
public void onOpened(@Nullable String title, @Nullable String body, @Nullable Map<String, String> extraMap) {
/*
* title 推送通知标题
* body 推送通知内容
* extraMap 推送通知额外参数,当是国内环境是,会包含阿里云推送自带的参数:
* _ALIYUN_NOTIFICATION_ID_:通知 ID
* _ALIYUN_NOTIFICATION_PRIORITY_:通知优先级
*/
}
});
}
[XDGPush setPushHandler:^(NSString * _Nullable title, NSString * _Nullable body, NSDictionary * _Nullable extra) {
// title 推送标题
// body 推送内容
// extra 推送完整数据,可在此获取自定义数据
}];
暂无
// 3. 注册推送内容回调,在用户点击推送后调用
FXDGPush::SetPushHandler(FXDGPush::FPushHandlerDelegate::CreateLambda([Printer, this](const FString& Title,const FString& Body,const TSharedPtr<FJsonObject>& Extra)
{
// Title 推送标题
// Body 推送内容
// Extra 推送完整数据,可在此获取自定义数据
}));
【可选】三、获取打开应用前点击的通知内容
如果是在应用未启动时从通知打开的应用想获取推送数据,因为此时推送回调还未设置,无法收到回调,可以使用如下接口获取
- Android
- iOS
- Unity
- UE
// PushActivity.java
import com.xd.sdk.push.XDGPush;
import java.util.Map;
// ...
private void getLatestPushData() {
Map<String, String> latestPushData = XDGPush.getLatestPushData();
if (latestPushData != null) {
String title = latestPushData.get("title"); // title
String summary = latestPushData.get("summary"); // summary
String extraMapStr = latestPushData.get("extraMap"); // extraMap 的 JSON 字符串
// ...
}
}
NSDictionary *pushData = [XDGPush getLatestPushData];
NSString *title = [pushData valueForKey:@"title"];
NSString *body = [pushData valueForKey:@"body"];
NSDictionary *extra = [pushData valueForKey:@"extra"];
暂无
#if PLATFORM_IOS
TSharedPtr<FJsonObject> PushData = FXDGPush::GetLatestPushData();
FString Title = PushData->GetStringField(TEXT("title"));
FString Body = PushData->GetStringField(TEXT("body"));
TSharedPtr<FJsonObject> Extra = PushData->GetObjectField(TEXT("extra"));
#endif
【可选】四、iOS 平台设置前台通知展现样式
iOS 应用在打开并且在前台时,可以设置推送通知的展现样式,SDK 默认使用角标+横幅,没有特殊需求不建议修改设置。
- Android
- iOS
- Unity
- UE
不支持
// Badge 应用角标
// Sound 通知声音
// Alert 前台浮窗
// List 通知列表 iOS 14+
// Banner 横幅 iOS 14+
// 不主动设置的话默认使用 Badge|Alert 满足大部分场景需求
[XDGPush setPushPresentationOption:(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert)];
暂无
#if PLATFORM_IOS
// Badge 应用角标
// Sound 通知声音
// Alert 前台浮窗
// List 通知列表 iOS 14+
// Banner 横幅 iOS 14+
// 不主动设置的话默认使用 Badge|Alert 满足大部分场景需求
PushPresentationOption Option = PushPresentationOption::Badge | PushPresentationOption::Alert;
FXDGPush::SetPushPresentationOption(Option);
#endif
【可选】五、iOS 平台清除应用角标数字
iOS 推送通知可以携带角标,(目前我们后台发送的通知没有角标,)如果想清除角标数字,可以通过如下接口传入数量 0 实现。
- Android
- iOS
- Unity
- UE
不支持
[XDGPush setAppIconBadgeNumber:0];
暂无
#if PLATFORM_IOS
FXDGPush::SetAppIconBadgeNumber(0);
#endif