iOS10 远程推送你玩过了吗?

上一章节<a href="http://www.jianshu.com/p/0ca7ffd9ec29">iOS10 本地推送你玩过了吗?</a>,了解了本地推送了,这一节,玩耍一下iOS10的远程推送。了解了本地推送之后,再去了解远程推送就简单多了。


远程推送的原理图
<a href="http://www.jianshu.com/p/2f3202b5e758">图品来自</a>


Paste_Image.png

说一下我们远程推送的一般的需求。
1、远程推送是在用户的app没有处于前台的时候用来提醒用户使用app的一种手段,为了提醒用户相关的信息。以增加app的活跃度。
2、当收到远程推送的时候,用户点击提醒框,根据提醒的内容,进入相关的具体内容的展示界面

别的木有了吧。我感觉最主要的就是这两个场景。

让我们玩一下iOS10的远程推送。
1、证书文件的配置,这里就不用说了吧
2、介绍一个好用的测试工具 <a href="https://github.com/KnuffApp/Knuff/releases">Kunff</a>


Paste_Image.png

Paste_Image.png

Paste_Image.png

3、注册远程推送动作

    // 注册 push
    func registerPush(application:UIApplication) {
        
        // 首先通过系统版本进行判断,进行不同的注册
        let version:NSString = UIDevice.current.systemVersion as NSString;
        let versionFloat = version.floatValue
        if versionFloat < 10{
            
            let settings = UIUserNotificationSettings.init(types: [.alert, .sound, .badge], categories: nil)
            application.registerUserNotificationSettings(settings)
            
        }else{
            
            if #available(iOS 10.0, *) {
                UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
                    granted, error in
                    if granted {
                        // 用户允许进行通知
                        
                        print("用户允许进行通知了")
                        
                    }else{
                        print("用户不允许进行通知了")
                    }
                }
                
                // 向 APNs 请求 token:
                UIApplication.shared.registerForRemoteNotifications()
                
            } else {
                // Fallback on earlier versions
            }
        }
    }

添加这个方法之后。

UIApplication.shared.registerForRemoteNotifications()

就会走

// 获取token,有需要的话将token上传到推送服务器
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        
        let tokenString = deviceToken.hexString
        print("Get Push token: \(tokenString)")
    }

4、证书也准备好了,测试软件也准备就绪了,代码也写好了,跑一把呗。
当然了别忘了这个


Paste_Image.png

获取自己的测试手机的token,小插曲<经测试发现,这个token会发生变化的。在开发环境下,app卸载之后,重新运行,token就会发生变化>。


Paste_Image.png

进行简单的测试


Paste_Image.png

通了


Paste_Image.png

上一节,我们了解了本地推送的相关。<a href="http://www.jianshu.com/p/0ca7ffd9ec29">iOS10 本地推送你玩过了吗?</a>
本地推送提前设置的,<code>title</code>,<code>subtitle</code>,<code>categoryIdentifier</code>等等参数都能。
如果想添加这些东西,则需要将 <code>alert</code>从字符串换为字典,新的 payload 是:

{
  "aps":{
    "alert":{
      "title":"iOS 10 title",
      "subtitle":"iOS 10 subtitle",
      "body":"iOS 10 body"
    },
    "sound":"default",
    "badge":1
  }
}

玩一下


Paste_Image.png

有一个无脑问题,这么写推送信息不行吗?

{
  "aps":{
    "alert":{
      "title":"iOS 10 title",
      "subtitle":"iOS 10 subtitle",
      "body":"iOS 10 body",
       "sound":"default",
       "badge":3
    }
  }
}

把** "sound":"default", "badge":3** 写在alert的里面不行吗?这样写虽然能收到推送,但是<code>sound</code> 和 <code>badge</code>的作用就废了,感兴趣的可以自行实验。

5、看一下接收远程推送的方法,是不是很熟悉,接收本地推送的也是这个方法

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)

当然了,远程推送也是可以通过<code>categoryIdentifier</code>来设置自定义的交互。
发送远程推送的内容

{
  "aps":{
    "alert":{
      "title":"iOS 10 title",
      "subtitle":"iOS 10 subtitle",
      "body":"iOS 10 body"
    },
    "category":"saySomethingCategory",
    "sound":"default",
    "badge":3
  }
}

<code> "category":"saySomethingCategory"</code>需要写在alert平级的地方。不然解析不出来的。
收到推送的样式展示,因为


Paste_Image.png

Paste_Image.png

了解了本地推送,再了解远程推送是不是就很简单了。
等等,本地推送不是能展示多媒体附件,音频,视频,还有图片。
远程推送这些东西能做到吗?当然也能做到了。
但是展示多媒体的时候肯定得是访问的本地的文件路径,那么可以猜想一下,远程推送肯定是推送的附件的下载路径,下载下来之后再去展示。

iOS10 之前收到推送之后就会直接展示了,iOS10 有这个能力下载完了附件再去展示吗?
答案是可以,但是得借助苹果的另一个神器


Paste_Image.png

最后,献上参考Demo地址:https://github.com/RunOfTheSnail/PushDemo001

下一章实现远程推送展示推送的图片。
<a href="http://www.jianshu.com/p/559fb72a99d0">iOS10 通知extension之 Service Extension你玩过了吗?</a>

参考资料:
http://www.cocoachina.com/ios/20160628/16833.html
https://onevcat.com/2016/08/notification/
http://www.cnblogs.com/lidongq/p/5968923.html
https://developer.apple.com/reference/usernotifications/unnotificationattachment
图画的不错
http://www.jianshu.com/p/2f3202b5e758
http://www.cocoachina.com/ios/20161021/17820.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,825评论 4 377
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,887评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,425评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,801评论 0 224
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,252评论 3 299
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,089评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,216评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 31,005评论 0 215
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,747评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,883评论 2 255
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,354评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,694评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,406评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,222评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,242评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,017评论 2 281

推荐阅读更多精彩内容