美文网首页
本地通知和远程推送

本地通知和远程推送

作者: T92 | 来源:发表于2016-10-28 17:10 被阅读61次

推送分为本地推送和远程推送,远程推送要求用开发者账号,一般使用极光推送,过程比较繁琐,需要用开发者账号在苹果开发者网站生成开发证书,生产证书和测试证书,需要在极光网站上传证书等,比较复杂

开发者账号种类
1.个人开发者账号 99$/年,只能有一个开发者,用个人开发的项目可以上架到AppStore,每个账号限制100台设备
2.公司开发者账号 99$/年,可以有多个开发者,开发的项目可以上架到AppStore,每个账号限制100台设备,申请之前需要先申请一个邓白氏编码
3.企业开发者账号 299$/年,可以有多个开发者,开发的项目不能上架到AppStore,开发项目只限内部使用,不对外开放,每个账号最多可以有1000台设备,申请之前需要先申请一个邓白氏编码
4.教育开发者账号:免费,在申请账号之前需要上传由国家颁布的学院营业执照

推送

一、什么是消息推送

消息推送,也被叫做远程通知,是当程序没有启动或者不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般来说,当要显示消息或下载数据的时候,通知是由远程服务器发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称APNS)推送到设备的相应程序上。

二、消息推送的原理

1、相关概念

  1. Provider:就是为指定iOS设备应用程序提供Push的服务器(假如说iOS设备的应用程序是客户端的话,那么Provider可以理解为服务端,也就是消息的发起者),公司自己的服务器
  2. APNS:Apple Push Notification Service[苹果消息推送服务器]
    3)iPhone设备:用来接收APNS下发下来的消息
  3. 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.小说类的应用,告诉用户有多久没来看书了

  1. 闹铃的提醒,比如提醒该吃药了

用到的类: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 推送更简单,也另外提供应用内消息推送。这在类似于聊天的场景里很有必要。

相关步骤:

1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png 11.png

相关文章

网友评论

      本文标题:本地通知和远程推送

      本文链接:https://www.haomeiwen.com/subject/bhjeuttx.html