源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

iOS10最新实现远程通知的开发教程详解

  • 时间:2022-08-13 10:21 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:iOS10最新实现远程通知的开发教程详解
[b]一、iOS推送通知简介 [/b] 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出现的Category(分类, 也可称之为快捷回复), iOS9出现的Text Input action(文本框快捷回复). 而在iOS10, 苹果可谓是大刀阔斧般的, 对远程通知和本地通知进行了大范围的更新. iOS10推出了全新的UserNotifications框架(iOS10之前从属于UIKit框架). 新的推送通知框架, 整合了本地推送和远程推送的点击处理方法, 使得以前专门处理推送点击的方法只能处理静默推送了. [b]二、远程推送通知介绍[/b] [b]1、什么是远程推送[/b] 在联网的情况下,由远程服务器推送给客户端的通知,又称APNs(Apple Push Notification Services)不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知在联网状态下,所有苹果设备都会与苹果服务器建立长连接 [b]2、远程推送的实现原理:[/b]       1.打开App时: 发送[code]UDID[/code]和[code]BundleID[/code]给[code]APNs[/code]加密后返回[code]deviceToken[/code]       2.获取[code]Token[/code]后,App调用接口,将用户身份信息和[code]deviceToken[/code]发给服务器,服务器记录       3.当推送消息时, 服务器按照用户身份信息找到存储的[code]deviceToken[/code],将消息和[code]deviToken[/code]发送给[code]APNs[/code]       4.苹果的APNs通过[code]deviceToken[/code], 找到指定设备的指定程序, 并将消息推送给用户 [b]3、实现远程推送功能的前提 [/b]       1.真机       2.调试阶段的证书         [code] iOS_development.cer [/code]用于真机调试的证书          [code]aps_development.cer [/code]用于真机推送调试能的证书          [code]xxx.mobileprovision [/code]描述文件,记录了能够调试的手机、电脑和程序       3.发布阶段的证书           [code]iOS_distribution.cer [/code]用于发布app的证书           [code]aps.cer [/code]用于发布时,让app有推送功能的证书           [code]xxx.mobileprovision[/code] 描述文件,记录了能够发布app的电脑 如何配置证书, 不在本教程内, 请读者自行处理, 或者参考视频教程 [b]三、iOS10 全新远程通知教程[/b] [b]一、 注册远程推送并获取DeviceToken[/b] 1.创建iOS的项目,并输入项目名字 2.在[code]AppDelegate[/code]中导入头文件:
 #import <UserNotifications/UserNotifications.h>
3.在[code]application:didFinishLaunchingWithOptions[/code]方法中, 注册远程通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
 {
 //请求通知权限, 本地和远程共用
 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
 [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {
  if (granted) { 
   NSLog(@"请求成功"); 
    } else { 
    NSLog(@"请求失败"); 
    } 
   }];

 //注册远程通知
 [[UIApplication sharedApplication] registerForRemoteNotifications];

 //设置通知的代理
 center.delegate = self;

 return YES;
 }
4.在接收远程推送的[code]DeviceToken[/code]方法中, 获取Token
 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
 { 
 //将来需要将此Token上传给后台服务器
 NSLog(@"token:%@", deviceToken);
 }
[b]二、 iOS10远程推送通知的处理方法[/b] 当点击了推送后, 如果你希望进行处理. 那么在iOS10中, 还需要设置[code]UNUserNotificationCenter[/code]的[code]delegate[/code], 并遵守[code]UNUserNotificationCenterDelegate[/code]协议. 以及实现下面实现3个方法, 用于处理点击通知时的不同情况的处理       [code]willPresentNotification:withCompletionHandler [/code]用于前台运行       [code]didReceiveNotificationResponse:withCompletionHandler [/code]用于后台及程序退出       [code]didReceiveRemoteNotification:fetchCompletionHandler[/code]用于静默推送
//设置通知的代理
center.delegate = self;
1.前台运行 会调用的方法 前台运行: 指的是程序正在运行中, 用户能看见程序的界面. iOS10会出现通知横幅, 而在以前的框架中, 前台运行时, 不会出现通知的横幅.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
 { 
  NSDictionary *userInfo = notification.request.content.userInfo; 

  //前台运行推送 显示红色Label
  [self showLabelWithUserInfo:userInfo color:[UIColor redColor]];

  //可以设置当收到通知后, 有哪些效果呈现(声音/提醒/数字角标)
  completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
 }
2.后台运行及程序退出 会调用的方法 后台运行: 指的是程序已经打开, 用户看不见程序的界面, 如锁屏和按Home键. 程序退出: 指的是程序没有运行, 或者通过双击Home键,关闭了程序.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler
 {
  NSDictionary *userInfo = response.notification.request.content.userInfo; 

  //后台及退出推送 显示绿色Label
  [self showLabelWithUserInfo:userInfo color:[UIColor greenColor]]; 

  completionHandler();
 }
3.静默推送通知 会调用的方法 静默推送: iOS7以后出现, 不会出现提醒及声音. 要求: 推送的[code]payload[/code]中不能包含[code]alert[/code]及[code]sound[/code]字段 需要添加[code]content-available[/code]字段, 并设置值为1 例如:[code] {"aps":{"content-available":"1"},"PageKey”":"2"} [/code]
 //如果是以前的旧框架, 此方法 前台/后台/退出/静默推送都可以处理
 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 {
   //静默推送 显示蓝色Label
  [self showLabelWithUserInfo:userInfo color:[UIColor blueColor]]; 

  completionHandler(UIBackgroundFetchResultNewData);
  }
4.处理通知的公用方法 开发中, 点击通知的逻辑应当看自己程序的需求. 这里为了方便演示, 简单的将通知的值, 通过[code]UILabel[/code]显示在主界面上.
 - (void)showLabelWithUserInfo:(NSDictionary *)userInfo color:(UIColor *)color
 { 
  UILabel *label = [UILabel new];
  label.backgroundColor = color; 
  label.frame = CGRectMake(0, 250, [UIScreen mainScreen].bounds.size.width, 300);
  label.text = userInfo.description;
  label.numberOfLines = 0;
  [[UIApplication sharedApplication].keyWindow addSubview:label];
 }
[b]三、测试远程推送[/b] [code]PushMeBaby[/code]是一个简单的模拟服务器的Mac小程序, 可以将内容提交给苹果的APNs服务器. 为了测试远程通知, 我们需要安装此程序. 请前往www.github.com, 搜索并下载[code]PushMeBaby[/code] 使用时: 编译该项目, 如果报错, 则注释报错的代码, 不影响实际使用. 进入苹果开发者网站, 获取真机调试用的远程推送证书, 导入到项目中 将之前获取到的[code]DeviceToken[/code], 及测试的文字, 填入该项目中的[code]AppDelegate[/code]中的[code]init[/code]方法中. 运行此项目, 会出现一个Mac小程序, 点击Push即可发送远程通知.
 - (id)init { 
  self = [super init]; 
  if(self != nil) { 
   self.deviceToken = @"de20184c ef0461d5 12c76422 f5b78240 5f657e18 ebf91c9f 01d5560c e2913102";
   self.payload = @"{\\"aps\\":{\\"alert\\":{\\"title\\":\\"himeao\\",\\"subtitle\\":\\"自学成才\\",\\"body\\":\\"iOS10远程&本地推送教程\\"},\\"badge\\":1,\\"sound\\":\\"default\\"},\\"PageKey\\":\\"1\\"}"; 
   self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"]; 
  } 
  return self;
  }
[b]总结[/b] 以上就是iOS10最新实现远程通知开发教程的全部内容,这篇文章的内容对大家学习iOS10还是很有参考借鉴价值的,希望能对各位iOS开发者们有所帮助,如果大家有疑问可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部