推送模块提供了远程推送和本地通知的功能。
注意:请在接入前,删除原游戏中已经添加的第三方推送 SDK 和相关 API 接口,防止发生冲突和闪退情况。
说明:游戏需要先找 SuperSDK 对外接口人开通该功能,申请 WePush 参数(江流儿:yuhc@yoozoo.com 二二:hanlj@yoozoo.com)。
接口描述:注册推送服务,在初始化完成后调用。
接口调用:
[SuperSDK invoke:@"push" funcName:@"registerPush" parameters:@{
@"showType" : @"1", // 必传,显示类型,0:表示应用在前台也需要弹出通知,1:表示应用在前台不需要弹出通知
@"lang" : @"zh" // 必传,推送语言,固定传 zh,此处为占位符
}];
说明:远程推送提供了服务端推送的功能。
接口描述:绑定推送用户,登录完成后调用。
注意: 传入的用户 ID 必须是 SuperSDK 获取到的带前缀的 osdk_user_id。
接口调用:
[SuperSDK invoke:@"push" funcName:@"bindUser" parameters:@{
@"osdk_user_id" : @"0060015_123" // 必传,用户 ID,必须是带前缀的用户 ID,如 000016_123456
}];
说明:当游戏调用注册推送服务、绑定用户两个接口后,就可以收到服务端推送过来的消息。接收的地方为 SuperSDK 的统一回调里面,如下所示;
接口回调:
+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
NSDictionary *retParam = nil;
if (parameters) {
NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
if (jsonData) {
retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
}
}
int code = [[retParam objectForKey:@"code"] intValue];
NSDictionary *data = [retParam objectForKey:@"data"];
if ([moduleName isEqualToString:@"push"]) {// Push模块回调
if ([funcName isEqualToString:@"receiveRemoteNotification"]) {
NSDictionary *userInfo = [data objectForKey:@"userInfo"]; // 推送消息
NSString *identifier = [data objectForKey:@"identifier"]; // 设置了动作类别集合,并设置按钮的 identifier,才会有此值!
notifyUserInfo = userInfo;
NSLog(@"收到远程推送消息,%@", userInfo);
}
}
}
日志打印:
moduleName : push,
funcName : receiveRemoteNotification,
parameters : {
"msg": "收到远程推送",
"data": {
"userInfo": {
"aps": {
"alert": "这是一条推送测试消息!",
"badge": 1,
"sound": "default"
}
},
"identifier": ""
},
"code": 1
}
收到远程推送消息,{
aps = {
alert = "\U8fd9\U662f\U4e00\U6761\U63a8\U9001\U6d4b\U8bd5\U6d88\U606f\Uff01";
badge = 1;
sound = default;
};
}
说明:推送模块提供了本地通知的功能。
接口描述:当游戏需要接入本地推送,调用存储本地推送的接口,如下所示:
接口调用:
NSDateFormatter *format = [[NSDateFormatter alloc] init];
format.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *fireDate = [format dateFromString:@"2023-12-18 18:30:00"];
NSTimeInterval fireInterval = [fireDate timeIntervalSince1970];
[SuperSDK invoke:@"push" funcName:@"addLocalNotification" parameters:@{
@"identifier" : @"1", // 本地推送的唯一标识符,纯数字类型的字符串,长度不超过 8 位
@"fireDate" : @(fireInterval).stringValue, // 推送触发时间(秒),为 10 位时间戳
@"alertTitle" : @"通知栏显示的推送标题", // 通知栏显示的推送标题( iOS 8.2 系统以下设置无效!)
@"alertBody" : @"通知栏显示的推送内容", // 通知栏显示的推送内容
@"badge" : @"1", // 应用上显示的消息条数
@"repeat" : @"0", // 0:表示不重复,1:表示每天重复,2:表示每小时重复,3:表示每分钟重复
@"showType" : @"1", // 应用在前台是否展示通知,0:展示,1:不展示,默认:0,注意:必须和注册接口传的值保持一致!
@"isSound" : @"1", // 是否开启通知声音,1:开启, 0:关闭, 默认:1
@"soundName" : @"default.caf", // 音频文件名称,后缀名必须是 caf,且音频时长在 30s 以内,需将音频文件添加到工程中,如:sound.caf
@"userInfo" : @{
@"key" : @"value"
} // 透传信息
}];
接口回调:
+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
NSDictionary *retParam = nil;
if (parameters) {
NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
if (jsonData) {
retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
}
}
int code = [[retParam objectForKey:@"code"] intValue];
NSDictionary *data = [retParam objectForKey:@"data"];
if ([moduleName isEqualToString:@"push"]) {// Push模块回调
if ([funcName isEqualToString:@"addLocalNotification"]) {// 添加本地推送回调
NSDictionary *notificationInfo = data;
if (code==BCORE_SUCCESS) {
NSLog(@"本地推送添加成功,本地推送信息为:%@", notificationInfo);
}
else {
NSLog(@"本地推送添加失败,原因为:%@", desc);
}
}
}
}
日志打印:
moduleName: push,
funcName: addLocalNotification,
result: {
"msg": "本地推送添加成功",
"data": {
"repeat": 0,
"alertTitle": "通知栏显示的推送标题",
"badge": 1,
"userInfo": {
"key": "value"
},
"isSound": "1",
"alertBody": "通知栏显示的推送内容",
"identifier": "notificationIdentifier1",
"soundName": "sound.caf",
"fireDate": 1543983420,
"showType": "0"
},
"code": 1
}
说明:当游戏调用注册推送服务、添加本地通知两个接口后,就可以接收本地通知消息。接收的地方为 SuperSDK 的统一回调里面,如下所示;
消息回调:
+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
NSDictionary *retParam = nil;
if (parameters) {
NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
if (jsonData) {
retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
}
}
int code = [[retParam objectForKey:@"code"] intValue];
NSDictionary *data = [retParam objectForKey:@"data"];
if ([moduleName isEqualToString:@"push"]) {// Push模块回调
if ([funcName isEqualToString:@"receiveLocalNotification"]) {
NSDictionary *notificationInfo = data;
NSLog(@"收到本地推送消息,消息为:%@", notificationInfo);
}
}
}
日志打印:
moduleName: push,
funcName: receiveLocalNotification,
result: {
"msg": "收到本地推送消息",
"data": {
"repeat": 0,
"alertTitle": "通知栏显示的推送标题",
"badge": 1,
"alertBody": "通知栏显示的推送内容",
"identifier": "notificationIdentifier1",
"soundName": "sound.caf",
"fireDate": 1544077396.1952529,
"userInfo": {
"key": "value",
"showType": "0",
"UPush_LocalNotification_Identifier_Key": "notificationIdentifier1"
}
},
"code": 1
}
接口描述:当游戏需要接入本地推送,需要查询该 identifier 的本地推送是否存在,如下所示:
接口调用:
[SuperSDK invoke:@"push" funcName:@"fetchLocalNotification" parameters:@{
@"identifier" : @"notificationIdentifier1" // 本地推送的唯一标识符,根据这个参数来查询
}];
接口回调:
+ (void)handlerCallback:(NSString *)moduleName funcName:(NSString *)funcName parameters:(NSString *)parameters
{
NSLog(@"****** 收到回调\n moduleName : %@,\n funcName : %@,\n parameters : %@", moduleName, funcName, parameters);
NSDictionary *retParam = nil;
if (parameters) {
NSData *jsonData = [parameters dataUsingEncoding:NSUTF8StringEncoding];
if (jsonData) {
retParam = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];
}
}
int code = [[retParam objectForKey:@"code"] intValue];
NSDictionary *data = [retParam objectForKey:@"data"];
if ([moduleName isEqualToString:@"push"]) {// Push模块回调
if ([funcName isEqualToString:@"fetchLocalNotification"]) {
NSString *identifier = [data objectForKey:@"identifier"];
if (code==BCORE_SUCCESS) {
NSLog(@"推送标识符为%@的本地推送存在,推送的详细信息为:%@", identifier, data);
}
else {
NSLog(@"推送标识符为%@的本地推送不存在", identifier);
}
}
}
}
日志打印:
moduleName: push,
funcName: fetchLocalNotification,
result: {
"msg": "本地有该推送",
"data": {
"repeat": 3,
"alertTitle": "通知栏显示的推送标题",
"badge": 1,
"alertBody": "通知栏显示的推送内容",
"soundName": "sound.caf",
"identifier": "notificationIdentifier1",
"fireDate": 1543983420,
"userInfo": {
"key": "value",
"UPush_LocalNotification_Identifier_Key": "notificationIdentifier1",
"showType": "0"
}
},
"code": 1
}
接口描述:根据 identifier 删除本地推送,如下所示:
接口调用:
[SuperSDK invoke:@"push" funcName:@"deleteLocalNotification" parameters:@{
@"identifier" : @"notificationIdentifier1" // 本地推送的唯一标识符
}];
接口描述:删除存在的所有本地推送,如下所示:
接口调用:
[SuperSDK invoke:@"push" funcName:@"deleteAllLocalNotifications" parameters:nil];