接入 iOS
本文将向您详细介绍将消息推送服务接入 iOS 客户端的接入流程。
操作步骤
要使用消息推送服务,您需要完成以下接入步骤:
选择接入方式并接入。
消息推送服务支持以下三种接入方式,您可以根据实际情况进行选择。关于接入方式的更多信息,请参见 接入方式介绍。在确定接入方式后,请您参考各接入方式的接入文档,添加消息推送 SDK 完成接入。
配置工程。需要在工程的 TARGETS 设置中开启以下两项配置:
Capabilities > Push Notifications
Capabilities > Background Modes > Remote notifications
使用 SDK。下面对不同接入方式的 SDK 使用进行说明。
基于 mPaaS 框架接入
注册 deviceToken(非必需)。
消息推送 SDK 在应用启动完成时,会自动请求注册 deviceToken,一般情况下您无需请求注册 deviceToken。但是当特殊情况下(比如启动时有隐私管控,阻止一切网络请求时)您需要在管控授权后,再次触发注册 deviceToken,示例代码如下:
- (void)registerRemoteNotification { // 注册推送 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {// 10.0+ UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { // Enable or disable features based on authorization. if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [[UIApplication sharedApplication] registerForRemoteNotifications]; }); } }]; }]; } else {// 8.0,9.0 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } }
获取 deviceToken 并绑定 userId。
与基于 iOS 原生框架相比,基于 mPaaS 框架的应用的生命周期被 mPaaS 框架接管,应用获取 deviceToken 的回调方法有所不同,代码示例如下:
// import <PushService/PushService.h> // 在 DTFrameworkInterface 分类中重写如下方法 - (DTFrameworkCallbackResult)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[PushService sharedService] setDeviceToken:deviceToken]; [[PushService sharedService] pushBindWithUserId:@"your userid(需替换)" completion:^(NSException *error) { }]; return DTFrameworkCallbackResultContinue; }
说明消息推送 SDK 同时提供了解绑的接口
- (void)pushUnBindWithUserId:(NSString *)userId completion:(void (^)(NSException *error))completion;
,用于解除设备的 deviceToken 与当前应用的 userId 的绑定。如在用户切换账号后,可以调用解绑接口。绑定用户手机号。
注意目前,仅杭州非金融区提供短信补充服务。
将 deviceToken 和用户的手机号码绑定。绑定手机号码后,用户就可以通过该手机号码收到相关推送短信。
// 若在绑定接口上传手机号码,则可以使用短信补充服务 - (void)pushBindWithUserId:(NSString *)userId phoneNumber:(NSString *)phoneNumber completion:(void (^)(NSException *error))completion;
接收推送的消息。
基于 mPaaS iOS 框架的应用,由于其生命周期被 mPaaS 框架接管,与基于 iOS 原生框架相比,收到消息的回调方法不同,代码示例如下:
// import <PushService/PushService.h> // 在 DTFrameworkInterface 分类中重写如下方法 - (DTFrameworkCallbackResult)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // userInfo 为推送消息内容,业务解析处理 return DTFrameworkCallbackResultContinue; }
统计消息的打开率。
为了统计消息在客户端的打开率,您需要在 App 消息被用户打开时,调用
PushService
的pushOpenLogReport
接口(10.1.32 及以上版本可用)上报消息打开事件。该事件上报后,您可以在 mPaaS 控制台中的 消息推送 > 概览 页面中查看消息打开率的统计数据。/** * 打开推送消息的上报接口,用于统计推送消息的打开率 * @param userInfo 消息的 userInfo * @return */ - (void)pushOpenLogReport:(NSDictionary *)userInfo;
基于已有工程接入
在基于已有工程且使用 mPaaS 插件或 CocoaPods 接入 iOS 客户端的情况下,您需要完成以下操作。
注册 deviceToken(非必需)。
消息推送 SDK 在应用启动完成时,会自动请求注册 deviceToken,一般情况下您无需请求注册 deviceToken。但是当特殊情况下(比如启动时有隐私管控,阻止一切网络请求时)您需要在管控授权后,再次触发注册 deviceToken,示例代码如下:
- (void)registerRemoteNotification { // 注册推送 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {// 10.0+ UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { // Enable or disable features based on authorization. if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [[UIApplication sharedApplication] registerForRemoteNotifications]; }); } }]; }]; } else {// 8.0,9.0 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge |UIUserNotificationTypeSound|UIUserNotificationTypeAlert) categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } }
获取 deviceToken 并绑定 userId。
mPaaS 提供的消息推送 SDK 中封装了向 APNs 服务器注册的逻辑,在程序启动后,Push SDK 自动向 APNs 服务器注册。您可在注册成功的回调方法中获取 APNs 下发的 DeviceToken,然后调用
PushService
的接口方法,上报绑定 userId 至移动推送核心。// import <PushService/PushService.h> - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [[PushService sharedService] setDeviceToken:deviceToken]; [[PushService sharedService] pushBindWithUserId:@"your userid(需替换)" completion:^(NSException *error) { }]; }
消息推送 SDK 同时提供了解绑的接口
- (void)pushUnBindWithUserId:(NSString *)userId completion:(void (^)(NSException *error))completion;
,用于解除设备的 deviceToken 与当前应用的 userId 的绑定。如在用户切换账号后,可以调用解绑接口。绑定用户手机号。
注意目前,仅杭州非金融区提供短信补充服务。
将 deviceToken 和用户的手机号码绑定。绑定手机号码后,用户就可以通过该手机号码收到相关推送短信。
// 若在绑定接口上传手机号码,则可以使用短信补充服务 - (void)pushBindWithUserId:(NSString *)userId phoneNumber:(NSString *)phoneNumber completion:(void (^)
接收推送的消息。
客户端收到推送的消息后,如果用户点击查看,系统将启动相应应用。可在
AppDelegate
的回调方法中完成收到 push 消息后的逻辑处理。在 iOS 10 以下系统中,通知栏消息或静默消息的处理方法如下:
// iOS 10 以下 Push 冷启动处理 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSDictionary *userInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; if ([[[UIDevice currentDevice] systemVersion] doubleValue] < 10.0) { // iOS 10 以下 Push 冷启动处理 } return YES; } // App 在前台时,普通推送的处理方法;App 在前台或后台时,静默推送的处理方法;iOS 10 以下系统,通知栏消息处理方法 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler { //处理接受到的消息 }
在 iOS 10 及以上系统中,您需要实现以下代理方法来监听通知栏消息:
// 注册 UNUserNotificationCenter delegate if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 10.0) { UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; } //应用处于前台时的远程推送接收 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { NSDictionary *userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { //应用处于前台时的远程推送接收 } else { //应用处于前台时的本地推送接收 } completionHandler(UNNotificationPresentationOptionNone); } //应用处于后台或者活冷启动时远程推送接收 - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler { NSDictionary *userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { //应用处于后台或者活冷启动时远程推送接收 } else { //应用处于前台时的本地推送接收 } completionHandler(); }
统计消息的打开率。
基于已有工程统计消息打开率的操作方法和基于 mPaaS 框架完全相同。
配置推送证书。
要使用 mPaaS 消息推送控制台推送消息,您需要在控制台中配置 APNs 推送证书。该证书必须是与客户端签名对应的推送证书,否则客户端会收不到推送消息。有关详细的配置说明,查看 配置 iOS 推送通道。
后续操作
在 mPaaS 消息推送控制台配置完 APNs 证书后,可以按设备维度向应用推送消息。消息推送服务使用苹果的 APNs 服务向客户端推送消息,更多信息请参见 苹果及国外安卓设备推送流程。
上报用户 ID 并由服务端绑定用户和设备后,可以按用户维度向应用推送消息。
代码示例
点击此处 下载示例代码包。