热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了iOS10最新远程通知开发的实现过程,文章先对推送通知以及远程推送通知等进行了基本介绍,然后通过示例代码详细介绍了iOS10全新远程通知的教程,有需要的朋友们可以参考借鉴,下面来一起看看吧。

一、iOS推送通知简介

众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出现的Category(分类, 也可称之为快捷回复), iOS9出现的Text Input action(文本框快捷回复).

而在iOS10, 苹果可谓是大刀阔斧般的, 对远程通知和本地通知进行了大范围的更新. iOS10推出了全新的UserNotifications框架(iOS10之前从属于UIKit框架).

新的推送通知框架, 整合了本地推送和远程推送的点击处理方法, 使得以前专门处理推送点击的方法只能处理静默推送了.

二、远程推送通知介绍

1、什么是远程推送

在联网的情况下,由远程服务器推送给客户端的通知,又称APNs(Apple Push Notification Services)不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知在联网状态下,所有苹果设备都会与苹果服务器建立长连接

2、远程推送的实现原理:

      1.打开App时: 发送UDIDBundleIDAPNs加密后返回deviceToken

      2.获取Token后,App调用接口,将用户身份信息和deviceToken发给服务器,服务器记录

      3.当推送消息时, 服务器按照用户身份信息找到存储的deviceToken,将消息和deviToken发送给APNs

      4.苹果的APNs通过deviceToken, 找到指定设备的指定程序, 并将消息推送给用户

3、实现远程推送功能的前提

      1.真机

      2.调试阶段的证书

         iOS_development.cer 用于真机调试的证书

         aps_development.cer 用于真机推送调试能的证书

         xxx.mobileprovision 描述文件,记录了能够调试的手机、电脑和程序

      3.发布阶段的证书

          iOS_distribution.cer 用于发布app的证书

          aps.cer 用于发布时,让app有推送功能的证书

          xxx.mobileprovision 描述文件,记录了能够发布app的电脑

如何配置证书, 不在本教程内, 请读者自行处理, 或者参考视频教程

三、iOS10 全新远程通知教程

一、 注册远程推送并获取DeviceToken

1.创建iOS的项目,并输入项目名字

2.在AppDelegate中导入头文件:

 #import 

3.在application:didFinishLaunchingWithOptions方法中, 注册远程通知

- (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.在接收远程推送的DeviceToken方法中, 获取Token

 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
 { 
 //将来需要将此Token上传给后台服务器
 NSLog(@"token:%@", deviceToken);
 }

二、 iOS10远程推送通知的处理方法

当点击了推送后, 如果你希望进行处理. 那么在iOS10中, 还需要设置UNUserNotificationCenterdelegate, 并遵守UNUserNotificationCenterDelegate协议.

以及实现下面实现3个方法, 用于处理点击通知时的不同情况的处理

      willPresentNotification:withCompletionHandler 用于前台运行

      didReceiveNotificationResponse:withCompletionHandler 用于后台及程序退出

      didReceiveRemoteNotification:fetchCompletionHandler用于静默推送

//设置通知的代理
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以后出现, 不会出现提醒及声音.

要求:

推送的payload中不能包含alertsound字段

需要添加content-available字段, 并设置值为1

例如: {"aps":{"content-available":"1"},"PageKey”":"2"}

 //如果是以前的旧框架, 此方法 前台/后台/退出/静默推送都可以处理
 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
 {
   //静默推送 显示蓝色Label
  [self showLabelWithUserInfo:userInfo color:[UIColor blueColor]]; 

  completionHandler(UIBackgroundFetchResultNewData);
  }

4.处理通知的公用方法

开发中, 点击通知的逻辑应当看自己程序的需求.

这里为了方便演示, 简单的将通知的值, 通过UILabel显示在主界面上.

 - (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];
 }

三、测试远程推送

PushMeBaby是一个简单的模拟服务器的Mac小程序, 可以将内容提交给苹果的APNs服务器.

为了测试远程通知, 我们需要安装此程序.

请前往www.github.com, 搜索并下载PushMeBaby

使用时:

编译该项目, 如果报错, 则注释报错的代码, 不影响实际使用.

进入苹果开发者网站, 获取真机调试用的远程推送证书, 导入到项目中

将之前获取到的DeviceToken, 及测试的文字, 填入该项目中的AppDelegate中的init方法中.

运行此项目, 会出现一个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;
  }

总结

以上就是iOS10最新实现远程通知开发教程的全部内容,这篇文章的内容对大家学习iOS10还是很有参考借鉴价值的,希望能对各位iOS开发者们有所帮助,如果大家有疑问可以留言交流。


推荐阅读
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
author-avatar
漫湾镇团委
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有