开发指南
准备工作
接入前请联系平台同事确认 XDConfig.json 的最新参数。
对应平台的接入准备请参考 接入细节。
【必须】一、打开推送权限
每次启动后都需要调用该接口打开推送权限,否则可能无法收到推送,请在合适的时机调用该接口。
- Android
- iOS
- Unity
// PushActivity.java
import android.util.Log;
import com.xd.sdk.common.base.XDGError;
import com.xd.sdk.common.callback.Callback;
import com.xd.sdk.push.XDGPush;
// ...
private void requestPushPermission() {
XDGPush.requestPermission(PushActivity.this, new Callback<Boolean>() {
@Override
public void onCallback(Boolean aBoolean, XDGError xdgError) {
if (aBoolean) {
Log.i("PushActivity", "Push permission granted");
} else {
Log.e("PushActivity", "Error requesting push permission: " + (xdgError == null ? "unknown error" : xdgError.getMessage()));
}
}
});
}
[XDGPush registerPushWithHandler:^(BOOL success) {
if (success) {
// 推送打开
} else {
// 推送关闭
}
}];
XDGPush.RequestPermission(granted =>
{
if (granted) {
// 推送打开
} else {
// 推送关闭
}
});
【可选】二、设置推送回调,获取推送内容
如果游戏想获取玩家收到的推送内容,可以设置全局回调,在用户点击推送时会触发回调返回推送内容。
- Android
- iOS
- Unity
// PushActivity.java
import com.xd.sdk.push.XDGPush;
import com.xd.sdk.push.callback.XDGPushCallback;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
// ...
private void setPushCallback() {
XDGPush.setPushCallback(new XDGPushCallback() {
@Override
public void onOpened(@Nullable String title, @Nullable String body, @Nullable Map<@NotNull String, @NotNull String> extraMap) {
// title 推送通知标题
// body 推送通知内容
// extraMap 推送通知额外参数
}
});
}
[XDGPush setPushHandler:^(NSString * _Nullable title, NSString * _Nullable body, NSDictionary * _Nullable extra) {
// title 推送标题
// body 推送内容
// extra 推送完整数据,可在此获取自定义数据
}];
XDGPush.SetPushCallback(pushData =>
{
if (pushData != null)
{
Debug.Log("收到推送消息: " + JsonConvert.SerializeObject(pushData, Formatting.Indented));
}
else
{
Debug.Log("收到推送消息: NULL");
}
});
【可选】三、获取打开应用前点击的通知内容
如果是在应用未启动时从通知打开的应用想获取推送数据,因为此时推送回调还未设置,无法收到回调,可以使用如下接口获取
- Android
- iOS
- Unity
// 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");
String summary = latestPushData.get("summary");
String extraMapStr = latestPushData.get("extraMap");
// ...
}
}
NSDictionary *pushData = [XDGPush getLatestPushData];
NSString *title = [pushData valueForKey:@"title"];
NSString *body = [pushData valueForKey:@"body"];
NSDictionary *extra = [pushData valueForKey:@"extra"];
var latestPushData = XDGPush.GetLatestPushData();