推送分为本地推送和远程推送,远程推送要求用开发者账号,一般使用极光推送,过程比较繁琐,需要用开发者账号在苹果开发者网站生成开发证书,生产证书和测试证书,需要在极光网站上传证书等,比较复杂
开发者账号种类
1.个人开发者账号 99$/年,只能有一个开发者,用个人开发的项目可以上架到AppStore,每个账号限制100台设备
2.公司开发者账号 99$/年,可以有多个开发者,开发的项目可以上架到AppStore,每个账号限制100台设备,申请之前需要先申请一个邓白氏编码
3.企业开发者账号 299$/年,可以有多个开发者,开发的项目不能上架到AppStore,开发项目只限内部使用,不对外开放,每个账号最多可以有1000台设备,申请之前需要先申请一个邓白氏编码
4.教育开发者账号:免费,在申请账号之前需要上传由国家颁布的学院营业执照
推送
一、什么是消息推送
消息推送,也被叫做远程通知,是当程序没有启动或者不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般来说,当要显示消息或下载数据的时候,通知是由远程服务器发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称APNS)推送到设备的相应程序上。
二、消息推送的原理
1、相关概念
- Provider:就是为指定iOS设备应用程序提供Push的服务器(假如说iOS设备的应用程序是客户端的话,那么Provider可以理解为服务端,也就是消息的发起者),公司自己的服务器
- APNS:Apple Push Notification Service[苹果消息推送服务器]
3)iPhone设备:用来接收APNS下发下来的消息 - Client App:iOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端 app[消息的最终响应者]
2、推送的步骤
三个阶段
1):Provider[服务端]把要发送的消息,目的iOS设备标识打包,发送给APNS
2):APNS在自身的已注册Push服务的iOS设备列表中,查找有相应标识的iOS设备,并将消息发送到iOS设备
3):iOS设备把发送的消息传递给对应的应用程序,并且按照设定弹出Push通知
具体过程
1)[Client App]注册消息推送
2)[Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken
3)[Client App]将deviceToken发送给[Provider]Push服务端程序
4)当Push服务端程序满足发送消息条件了,[Provider]向[APNS Service]发送消息
5)[APNS Service]将消息发送给[Client App]
本地通知
本地推送:http://www.2cto.com/kf/201401/274532.html
本地推送的应用场景:
1.疯狂抢购的提醒业务,通知用户什么时候进行抢购
2.游戏场景,比如开心农场
3.小说类的应用,告诉用户有多久没来看书了
- 闹铃的提醒,比如提醒该吃药了
用到的类:UILocalNotification
涉及到的属性:
推送时间:fireDate
推送时区:timeZone
推送重复的间隔时间:repeatInterval
推送内容:alertBody
推送声音:soundName
推送的提示图标:applicationIconBadgeNumber
import UIKit
//本地推送应用场景
//单机游戏
//阅读类,小说类
//闹铃
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//iOS8之后推送接收不到消息需要手动设置
//获取系统版本号
let iPhoneSystemVersion = (UIDevice.currentDevice().systemVersion as NSString).floatValue
//设置通知类型
if iPhoneSystemVersion >= 8.0{
var type:UIUserNotificationType?
//写法1
//type = [.Alert,.Sound,.Badge]
//写法2,将值转换为rawvalue
let alet = UIUserNotificationType.Alert.rawValue
let sound = UIUserNotificationType.Sound.rawValue
let badg = UIUserNotificationType.Badge.rawValue
//通过构造方法将三种提示类型进行整合
type = UIUserNotificationType(rawValue: alet | sound | badg)
//将设置类型添加到系统设置中
let setting = UIUserNotificationSettings(forTypes: type!, categories: nil)
//将系统设置注册到系统管理
UIApplication.sharedApplication().registerUserNotificationSettings(setting)
}
//创建一个本地推送的通知任务--打开推送开关
creatLocalNotififation()
//取消本地通知任务 -- 关闭推送开关
//取消只完全停止指定任务,开关再次打开时相当于重新创建一个新的通知任务
//cancelLocalNotififation()
return true
}
//创建
func creatLocalNotififation(){
//初始化
let localNotification = UILocalNotification()
//设置推送时间(从当前时间开始多长时间之后开始推送)//秒
localNotification.fireDate = NSDate(timeIntervalSinceNow: 10)
//设置时区
localNotification.timeZone = NSTimeZone.defaultTimeZone()
//设置周期
//repeatCalendar也可以
localNotification.repeatInterval = NSCalendarUnit.Day //以天为周期
//推送内容
localNotification.alertBody = "狗粮降价,赶紧来购买吧"
//推送提示音
localNotification.soundName = "音效.caf"
//设置接收到的消息数
//在实际项目中,这个参数会定义一个变量(假设n),每增加一个消息,变量就自增
localNotification.applicationIconBadgeNumber = 1
//将本地通知添加到系统管理
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
}
//取消
func cancelLocalNotififation(){
//方式1,直接取消全部本地通知任务
//UIApplication.sharedApplication().cancelAllLocalNotifications()
//方式2,取消指定条件下的本地通知任务
//获取系统中所有的本地通知任务
let notifacitions = UIApplication.sharedApplication().scheduledLocalNotifications
//遍历数组找出指定的通知任务
for item in notifacitions!{
//将通知内容作为查找条件
if item.alertBody == "狗粮降价,赶紧来购买吧"{
//取消
UIApplication.sharedApplication().cancelLocalNotification(item)
//处理消息数量
UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}
}
}
//MARK: - 设置消息提示数量
//当接受到本地通知后 n递减,applicationIconBadgeNumber=0的时候系统会认为没有未阅读的通知消息
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
//n递减
//这里暂时定死让其=0
application.applicationIconBadgeNumber = 0
}
//应用从后台进入前台
func applicationWillEnterForeground(application: UIApplication) {
application.applicationIconBadgeNumber = 0
}
}
极光远程推送
极光推送官网:https://www.jpush.cn/common/products
极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率
JPush iOS推送相比直接向APNS推送有什么好处呢?
• 减少开发及维护成本:
应用开发者不需要去开发维护自己的推送服务器与 APNS 对接。
集成了 JPush iOS SDK 后不必自己维护更新 device token。
通过 JPush 的 Web Portal 直接推送,也可以调用JPush的 HTTP 协议 API 来完成,开发工作量大大减少。
• 减少运营成本:
极光推送支持一次推送,同时向 Android, iOS, WinPhone 三个平台。支持统一的 API 与推送界面。
极光推送提供标签、别名绑定机制,以及提供了非常细分的用户分群方式,运营起来非常简单、直观。
• 提供应用内推送:
除了使得 APNS 推送更简单,也另外提供应用内消息推送。这在类似于聊天的场景里很有必要。
相关步骤:











网友评论