iOS 推送

推送功能接入文档

文档说明

此文档主要是用于在游戏开发商需要接入BaseSDK后使用推送功能时的补充文档。

阅读对象

接入BaseSDK的游戏及应用的iOS客户端开发者。

SDK配置说明

仅在需要使用firebase远程推送功能时在podfile添加以下库,功能需求需和运营确认。

  1. #firebase远程推送
  2. pod 'WPMIDSDKPush/MID_PushFirebase', '1.0.5'

推送权限配置

须开启Push Notification权限和后台运行权限。找到应用Target设置中的Signing & Capabilities,点击左上角+添加。如果没有开启推送权限,应用将获取不到DeviceToken;如果没开启后台运行权限,消息到达率将会比较低。

Remote notifications:APNs静默推送权限

服务端推送文档

服务端推送文档

本地推送功能

用于本地推送,不需要服务端配合。

注册苹果推送

接口说明:
在使用苹果本地和远程推送前需确保已经调用注册接口。

  1. - (void)registRemoteNotification:(UIApplication *_Nullable)application;

调用方法:

  1. [MIDGameOCSDK.shareInstance registRemoteNotification:application];

本地延迟推送

接口说明:
本地推送延迟指定时间发送,需先注册上述的苹果推送接口。

  1. /// 当前时间,延后几秒发出
  2. /// - Parameters:
  3. /// - notificationId: 当前通知的唯一标识符
  4. /// - title: 推送标题
  5. /// - contxt: 推送内容
  6. /// - delyTime: 延后时间
  7. - (void)sendLocalNotificationWithId:(NSString *_Nonnull)notificationId title:(NSString *_Nonnull)title context:(NSString *_Nonnull)contxt delyTime:(NSString *_Nonnull)delyTime;

调用方法:

  1. [[MIDGameOCSDK shareInstance] sendLocalNotificationWithId:@"唯一标识符" title:@"此处填写推送标题" context:@"此处填写推送内容" delyTime:@“此处设置需要延迟多少秒”];

本地指定日期推送

接口说明:
本地推送指定日期时间来发出,需先注册苹果推送。

  1. /// 指定日期时间来发出,日期格式为yyyyMMddhhmmss
  2. /// - Parameters:
  3. /// - notificationId: 当前通知的唯一标识符
  4. /// - title: 推送标题
  5. /// - contxt: 推送内容
  6. /// - date: 指定日期时间来发出,日期时间戳
  7. - (void)sendLocalNotificationWithId:(NSString *_Nonnull)notificationId title:(NSString *_Nonnull)title context:(NSString *_Nonnull)contxt date:(long)date;

调用方法:

  1. 1:字符串转时间戳
  2. NSString *timeStr = @“20240105121200”;//日期格式为yyyyMMddhhmmss字符串转时间戳
  3. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 创建一个时间格式化对象
  4. [dateFormatter setDateFormat:@"yyyyMMddhhmmss"]; //设定时间的格式
  5. NSDate *tempDate = [dateFormatter dateFromString:timeStr];//将字符串转换为时间对象
  6. [[MIDGameOCSDK shareInstance] sendLocalNotificationWithId:@"唯一标识符" title:@"推送测试3" context:@"本地指定日期推送测试" date:(long)[tempDate timeIntervalSince1970]*1000];
  7. 2:直接传入时间戳
  8. [[MIDGameOCSDK shareInstance] sendLocalNotificationWithId:@"唯一标识符" title:@"此处填写推送标题" context:@"此处填写推送内容" date:(long)[[NSDate date] timeIntervalSince1970]*1000];

取消指定推送

接口说明:
用于取消指定当前通知的唯一标识符的推送。

  1. /// 取消指定通知
  2. /// - Parameter notificationId: 当前通知的唯一标识符
  3. - (void)cancelLocalNotificationWithId:(NSString *_Nonnull)notificationId;

调用方法:

  1. [MIDGameOCSDK.shareInstance cancelLocalNotificationWithId:@“唯一标识符”];

取消全部推送

接口说明:
用于取消全部推送。

  1. /// 取消全部通知
  2. - (void)cancelAllLocalNotification;

调用方法:

  1. [MIDGameOCSDK.shareInstance cancelAllLocalNotification];

设置用户标签 【可选】

此接口用于设置用户推送标签,需要登录以后调用。
允许设置多个标签,标签设置为增加标签, 相同标签code 多次设置为修改。
比如有一个标签code: userlv name: 用户等级 value:1 首次设置代表为用户等级1级
再次设置 code: userlv name: 用户等级 value:2 为修改用户等级为2级

接口使用说明

  1. /**
  2. * 本地推送标签设置, 举例设置3个标签
  3. */
  4. //仅作为结构示例
  5. NSMutableDictionary *label1 = [[NSMutableDictionary alloc] init];
  6. [label1 setObject:@"对应的code" forKey:@"labelCode"];
  7. [label1 setObject:@"对应的name" forKey:@"labelName"];
  8. [label1 setObject:@"对应的value" forKey:@"labelValue"];
  9. NSMutableDictionary *label2 = [[NSMutableDictionary alloc] init];
  10. [label2 setObject:@"对应的code" forKey:@"labelCode"];
  11. [label2 setObject:@"对应的name" forKey:@"labelName"];
  12. [label2 setObject:@"对应的value" forKey:@"labelValue"];
  13. NSMutableDictionary *label3 = [[NSMutableDictionary alloc] init];
  14. [label3 setObject:@"对应的code" forKey:@"labelCode"];
  15. [label3 setObject:@"对应的name" forKey:@"labelName"];
  16. [label3 setObject:@"对应的value" forKey:@"labelValue"];
  17. NSArray *arr = [[NSArray alloc] initWithObjects:label1,label2,label3, nil];
  18. [MIDGameOCSDK.shareInstance MIDSDKSendUserlabels:arr];

参数说明

labels 参数说明,

参数 参数类型 参数说明
labelCode NSString 标签标识
labelName NSString 标签名称
labelValue NSString 标签内容

推送相关生命周期

所有推送相关生命周期接口都需要接入

  1. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
  2. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
  3. }
  4. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo
  5. {
  6. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didReceiveRemoteNotification:userInfo];
  7. }
  8. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
  9. {
  10. [[MIDGameOCSDK shareInstance] MIDSDKApplication:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
  11. }
  12. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
  13. {
  14. [MIDGameOCSDK.shareInstance MIDSDKApplication:application didFailToRegisterForRemoteNotificationsWithError:error];
  15. }