消息推送
更新时间:2025-05-27 11:35:51
该功能依赖移动应用推送服务,需要先在控制台配置后才可以正常使用。
推送配置
// 导入推送SDK头文件
#import <RTCXPush/RTCXPush.h>
申请 APNs 的 token,需要在 AppDelegate 类的 application:didRegisterForRemoteNotificationsWithDeviceToken:中完成 token 注册。
@protocol RTCXPushProtocol <NSObject>
/// sdk初始化方法,请在 AppDelegate [application:didFinishLaunchingWithOptions:`] 回调方法中调用此API
/// @param application 应用实例,直接使用AppDelegate [application:didFinishLaunchingWithOptions:`] 回调方法的 application 参数
/// @param launchOptions 应用启动选项,直接使用AppDelegate [application:didReceiveRemoteNotification:`] 回调方法的 launchOptions 参数
- (BOOL)application:(UIApplication *_Nonnull)application didFinishLaunchingWithOptions:(NSDictionary *_Nullable)launchOptions;
/// 注册 apns 成功回调时,使用此方法通知 sdk 初始化 移动推送通道
/// @param application 应用实例,直接使用AppDelegate [application:didRegisterForRemoteNotificationsWithDeviceToken:`] 回调方法的 application 参数
/// @param deviceToken 直接使用AppDelegate [application:didReceiveRemoteNotification:`] 回调方法的 deviceToken 参数
- (void)application:(UIApplication * _Nonnull)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData * _Nonnull)deviceToken;
/// 注册 apns 成功回调时,使用此方法通知 sdk
/// @param application application 应用实例,直接使用AppDelegate [application:didFailToRegisterForRemoteNotificationsWithError:`] 回调方法的 application 参数
/// @param error 失败原因介绍。直接使用AppDelegate [application:didFailToRegisterForRemoteNotificationsWithError:`] 回调方法的 error 参数
- (void)application:(UIApplication *_Nonnull)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *_Nonnull)error;
/// 在收到 apns 推送消息,调用此 API 通知 SDK,请在 AppDelegate [application:didReceiveRemoteNotification:`] 回调方法中调用此API
/// @param application 应用实例,直接使用AppDelegate [application:didReceiveRemoteNotification:`] 回调方法的 application 参数
/// @param userInfo apns 推送消息的内容,直接使用AppDelegate [application:didReceiveRemoteNotification:`] 回调方法的 userInfo 参数
- (void)application:(UIApplication *_Nonnull)application didReceiveRemoteNotification:(NSDictionary * _Nonnull)userInfo;
@end
调用示例如下:
- (void)registerRemoteNotifications {
if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {// iOS10特有
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
// 点击允许
NSLog(@"注册推送成功");
[center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
NSLog(@"UNNotificationSettings: %@", settings);
}];
} else {
// 点击不允许
NSLog(@"注册推送失败: %@",error);
}
}];
}
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 创建并设置窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
// 显示窗口
[self.window makeKeyWindow];
[self.window makeKeyAndVisible];
[RTCXPushService(RTCXPushProtocol) application:application didFinishLaunchingWithOptions:launchOptions];
[self registerRemoteNotifications];// 注册推送通知
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[RTCXPushService(RTCXPushProtocol) application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Register Error: %@", error);
[RTCXPushService(RTCXPushProtocol) application:application didFailToRegisterForRemoteNotificationsWithError:error];
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"Pushlog 后台 :[%s][%@]",__func__,@([UIApplication sharedApplication].applicationState));
[RTCXPushService(RTCXPushProtocol) application:application didReceiveRemoteNotification:userInfo];
}