iOS10推送通知开发教程


Posted in PHP onSeptember 19, 2016

虽然通知经常被过度使用,但是通知确实是一种获得用户关注和通知他们需要更新或行动的有效方式。iOS 10有了新的通知,如新消息、商业信息和时间表的变化。在本教程中,我将向你展示如何使用通知在你的iOS应用程序,并且显示iOS 10引入了新特性。开发iOS 10推送通知你需要最新版本的Xcode,Xcode 8测试版,这些目前都是可下载的,在下载页面。

你可以去Github下载本教程的整个工程。

开始

在Xcode中启用推送通知是很容易的,但你需要几个步骤。

创建一个新的工程,给它起一个唯一的Bundle Identifier.

当您已经创建了project,去Project Settings页选择Capabilities栏。打开推送通知,如下所示。

注意: 如果你是苹果的付费开发者成员,你就能看到推送通知功能这一栏。

iOS10推送通知开发教程

去Developer Account这一栏,从左侧的菜单栏中选择证书,IDs,和描述文件,然后选择App IDs在Identifiers栏中。找到已经创建的App的名称,在服务列表中选中。注意,有两个可配置状态的推送通知。

iOS10推送通知开发教程

不要关闭这个网页,你很快就会回来的。

发送通知

在本文中,我将使用Pusher发送推送通知。您还可以使用其他的解决方案如Houston。无论哪种方式,发送一个通知,你都需要一个证书。

去创建一个证书,打开Keychain Access,从证书认证菜单中选择Keychain Access -> Certificate Assistant -> Request a Certificate。

iOS10推送通知开发教程

iOS10推送通知开发教程

填写表单并单击Continue。确保你选择保存到了磁盘。

iOS10推送通知开发教程

返回到开发者账户的网页。你可以为你的App IDs生成开发(调试)证书或发布证书。

之后在选择右侧的申请,在底部,单击编辑。在推送通知部分,单击创建开发(调试)证书。

iOS10推送通知开发教程

在需要时,从Keychain,继续上传生成证书请求。

iOS10推送通知开发教程

现在你已经创建了证书,可以下载它。打开下载的文件安装它。

iOS10推送通知开发教程

下载并运行Pusher。这个程序的顶部需要填入一个推送的证书。为它位于你的钥匙链,OS X将询问是否允许Pusher访问证书。

iOS10推送通知开发教程

第二个字段需要device token,你会在下一步中得打它。

iOS10推送通知开发教程

收到通知

是时候敲代码了。收到通知的设备必须注册到苹果推送通知服务(APNS)。在应用启动的时候你要发送一个唯一的token。

打开AppDelegate.swift然后添加如下方法。

注意:该代码是基于Swift3.0。语法可能看起来不同于你之前使用过的。

func registerPushNotifications() {
 DispatchQueue.main.async {
 let settings = UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)
 UIApplication.shared().registerUserNotificationSettings(settings)
 }
}

我之后会解释,在这个设置中你会收到指定的通知类型。调用这个方法在应用程序启动的的文件里。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
 registerPushNotifications()
 return true
}

此时,应用程序将自动弹出一个Alert,询问用户是否要收到该通知。

iOS10推送通知开发教程

通知必须被注册,才能发送,而是否接受通知则需要用户批准。UIApplicationDelegate方法处理响应。

func application(_ application: UIApplication, didRegister notificationSettings: UIUserNotificationSettings) {
 if notificationSettings.types != UIUserNotificationType() {
 application.registerForRemoteNotifications()
 }
}

首先检查用户授予权限,然后调用该方法注册远程通知。当请求完成后者将调用另一个代理方法。这个方法响应包含一个device token,你可以打印进行调试。在发送推送通知来识别设备需要这个device token。

iOS10推送通知开发教程

如果出现错误,调用下面的方法。

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
 print("Registration failed!")
}

注意:重要的是在应用程序启动时要调用registerUserNotificationSettings,因为用户可以改变权限的设置。同样registerForRemoteNotifications也是很重要的,因为有些场景device token可以改变那么通知将不再发送。

到目前为止,这足以让你收到一个简单的通知。

通知内容

通过不同的通知内容,有不同的方式来使一个App来收到不同类型的通知,这些通知内容包括应用程序通知用户的信息,或者用户自定义的信息。

给用户发送通知,使用JSON格式,这个格式本身包含一个字典,对应aps的key。在这第二个字典你指定载内容和key。

最常见的是:

向用户显示的通知消息。这是一个简单的字符串,或一个字典key和标题一样,正文等等。
接收到通知的声音。它可以是一个定制的声音,或一个系统的声音。
应用图标右上角的角标个数。将其设置为0,消除角标。
有效的内容。使用值1发送一个无声的通知给用户。它不会播放任何声音,或任何角标设置,但是当通知被唤醒,应用将与服务器进行沟通。

本教程的一个简单的通知内容:

{
 "aps": {
 "alert": {
 "title":"Hello! :)",
 "body":"App closed..."
 },
 "badge":1,
 "sound":"default"
 }
}

应用程序的生命周期

拷贝device token粘贴在Pusher的token部分,拷贝这个JSON对象在Pusherd的payload部分。

iOS10推送通知开发教程

试着发送第一个通知。如果设备的屏幕被锁定,它将看起来如下,但什么都不会发生,当用户点击了这个通知视图。

iOS10推送通知开发教程

接受通知,你需要添加新的方法:

private func getAlert(notification: [NSObject:AnyObject]) -> (String, String) {
 let aps = notification["aps"] as? [String:AnyObject]
 let alert = aps?["alert"] as? [String:AnyObject]
 let title = alert?["title"] as? String
 let body = alert?["body"] as? String
 return (title ?? "-", body ?? "-")
}

这将返回收到的通知标题和正文,如果结构是相同的。

func notificationReceived(notification: [NSObject:AnyObject]) {
 let viewController = window?.rootViewController
 let view = viewController as? ViewController
 view?.addNotification(
 title: getAlert(notification: notification).0,
 body: getAlert(notification: notification).1)
}

这个方法将在应用程序主要视图UITableView内添加一行(参见ViewController的完整项目代码)。

我测试了三个案例的推送通知:

当应用关闭时
如果用户打开应用程序的通知,调用didFinishLaunchingWithOptions方法更新,如下:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
 // Override point for customization after application launch.
 application.applicationIconBadgeNumber = 0; // Clear badge when app launches
 // Check if launched from notification
 if let notification = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: AnyObject] {
 window?.rootViewController?.present(ViewController(), animated: true, completion: nil)
 notificationReceived(notification: notification)
 } else {
 registerPushNotifications()
 }
 return true
 }

假设用户已经看过了这个通知,那么角标就被清除了。然后,检查应用程序是从图标打开还是通过通知打开的。在第一种情况下,调用registerPushNotifications()方法然后继续之前的流程。如果应用是通过打开通知的方式运行,则调用自定义notificationReceived方法来添加行。

当应用运行在前台时
如果用户正在使用应用程序,这意味着应用程序在前台,接受通知的方法如下。在这个通知的方法中加入对tableView的处理:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
 notificationReceived(notification: userInfo)
}

注意:在这种情况下,通知将不会发出声音。

当应用运行在后台时
在这种情况下,我添加了一个方法来清除角标数目。通知的处理和应用程序在前台的处理是一样的。

func applicationWillEnterForeground(_ application: UIApplication) {
 application.applicationIconBadgeNumber = 0; // Clear badge when app is or resumed
}

最后,这个列表中有三行来自通知的内容。

iOS10推送通知开发教程

最后

随着iOS 10的通知,开发者有了更多比之前有趣的机会和不曾有的交互权限。我希望本教程中关于如何使用通知能帮助你更好的理解通知是如何工作的。

本文已被整理到了《iOS推送教程》,欢迎大家学习阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 PHP
PHP 代码规范小结
Mar 08 PHP
提高php运行速度的一些小技巧分享
Jul 03 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
Mar 22 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 #PHP
手把手编写PHP框架 深入了解MVC运行流程
Sep 19 #PHP
PHP 接入支付宝即时到账功能
Sep 18 #PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 #PHP
php mysql 封装类实例代码
Sep 18 #PHP
thinkphp自带验证码全面解析
Sep 18 #PHP
php操纵mysqli数据库的实现方法
Sep 18 #PHP
You might like
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
页面实时更新时间的JS实例代码
2013/12/18 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
python实现博客文章爬虫示例
2014/02/26 Python
python代码制作configure文件示例
2014/07/28 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
numpy数组拼接简单示例
2017/12/15 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
金融专业个人的自我评价
2013/10/18 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
工作中的自我评价如何写好
2013/10/28 职场文书
销售人员自我评价
2014/02/01 职场文书
文明餐桌活动方案
2014/02/11 职场文书
西式结婚主持词
2014/03/14 职场文书
三好学生竞选稿范文
2019/08/21 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
Java详细解析==和equals的区别
2022/04/07 Java/Android