supersdk

文档中心

文档中心

下载文档

WePush 推送模块


推送模块提供了远程推送和本地通知的功能。

注意:请在接入前,删除原游戏中已经添加的第三方推送 SDK 和相关 API 接口,防止发生冲突和闪退情况。

一、接入前准备

说明:游戏需要先找 SuperSDK 对外接口人开通该功能,申请 WePush 参数(江流儿:yuhc@yoozoo.com 二二:hanlj@yoozoo.com)。

二、注册推送接口(必接)

接口描述:注册推送服务,在初始化完成后调用。

接口调用:

[SuperSDK invoke:@"push" funcName:@"registerPush" parameters:@{
                                                                @"showType" : @"1", // 必传,显示类型,0:表示应用在前台也需要弹出通知,1:表示应用在前台不需要弹出通知
                                                                @"lang" : @"zh" // 必传,推送语言,固定传 zh,此处为占位符
                                                              }];

三、远程推送

说明:远程推送提供了服务端推送的功能。

1. 设置用户标识接口(必接)

接口描述:绑定推送用户,登录完成后调用。

注意: 传入的用户 ID 必须是 SuperSDK 获取到的带前缀的 osdk_user_id。

接口调用:

[SuperSDK invoke:@"push" funcName:@"bindUser" parameters:@{
                                                            @"osdk_user_id" : @"0060015_123" // 必传,用户 ID,必须是带前缀的用户 ID,如 000016_123456
                                                          }];

2. 收到远程推送回调(选接)

说明:当游戏调用注册推送服务、绑定用户两个接口后,就可以收到服务端推送过来的消息。接收的地方为 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;
    };
}

四、本地通知

说明:推送模块提供了本地通知的功能。

1. 添加本地通知(必接)

接口描述:当游戏需要接入本地推送,调用存储本地推送的接口,如下所示:

接口调用:

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
}

2. 收到本地通知回调(选接)

说明:当游戏调用注册推送服务、添加本地通知两个接口后,就可以接收本地通知消息。接收的地方为 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
}

3. 查询指定标识符的本地通知(选接)

接口描述:当游戏需要接入本地推送,需要查询该 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
}

4. 删除指定标识符的本地通知(选接)

接口描述:根据 identifier 删除本地推送,如下所示:

接口调用:

[SuperSDK invoke:@"push" funcName:@"deleteLocalNotification" parameters:@{
                                                                            @"identifier" : @"notificationIdentifier1" // 本地推送的唯一标识符
                                                                         }];

5. 删除所有本地通知(选接)

接口描述:删除存在的所有本地推送,如下所示:

接口调用:

[SuperSDK invoke:@"push" funcName:@"deleteAllLocalNotifications" parameters:nil];