关于iOS推送

关于推送,要说好像也没太多东西,但要细说,又是有很多可以说。如何配置,今天就不说了,各个平台不一样,每个平台都会有自己的配置文档,像友盟的,看它的官方文档就行。今天主要说一下接收跟一些业务逻辑。留个记录,方便自己以后查阅。苹果官方文档通知部分

1.数据格式

可能有很多人都没注意到这一点,苹果推送通知的格式是固定的,甚至还规定了特定字段的数据格式,如下是一般APP接收到的推送的数据格式,其中alert字段下的数据,是直接显示在设备通知栏的,iOS开发者并不能像安卓那样,先读取到数据,再处理选择性展示,所以title,body等字段的数据格式,都是规定死。开发者如果需要更多的数据,一般都是放payload字段下,或者自定义的key,如gameID等。如有敏感数据,最好加密传输。

{
   “aps” : {
      “alert” : {//APP直接展示的内容
         “title” : “Game Request”,
         “subtitle” : “Five Card Draw”
         “body” : “Bob wants to play poker”,
         “title-loc-key” : “国际化多语言用到的字段”,
         “title-loc-args” : “国际化,用以替换本地string文件的内容”,
         “mutable-content” : “判断是否富文本推送的标志”,
      },
      “category” : “GAME_INVITATION”//标志通知样式
   },
   “gameID” : “12345678”
   “payload” :“服务器给APP的数据”
}

具体各个字段的数据格式,可以看官方文档,这里贴出一部分

alert数据格式

以上便是一般推送通知所需注意的,本来想写的挺多的,后来看了一天官方文档,不知道要写些什么了,先放一个前人的连接,总结的较为详细关于推送的文章。

2.富文本推送通知

这个,上面那篇文章也有说到,我这里记一下自己的总结。富文本,就是大家平时看到的在通知栏显示图片,播放视频,甚至可以玩小游戏 widget game。富文本推送通知,主要是用到两个扩展类,NotificationContentExtension, NotificationServiceExtension。

创建扩展类

关于这两个扩展类,网上也有很多资料,这里就不再赘述,可自行搜索一下,我主要记一下我觉得比较关键的点。

富文本,主要用的在推送消息里的两个key,category ,mutable-content
  • category,用来标志通知类型,你可以添加多个扩展类以展示不同类型的通知,从而配置不同UI,代码中,就是用category去区分选择用哪一个扩展类去展示;
  • mutable-content,只有当mutable-content为1时,NotificationServiceExtension才能成功拦截消息;

补一句,多看官方文档。

3.点击推送消息后的页面跳转

这里要分3种情况

  • APP在前台或APP在后台但已启动
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

此时消息处理,页面跳转等逻辑就可以在这里处理

  • APP在后台且未启动
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

此时通知的内容为,UIApplicationLaunchOptionsRemoteNotificationKey

NSDictionary *pushNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

注意当用户之间点击APP图标进入APP时,pushNotification为nil,也就获取不到推送消息的内容了,只有用户点击推送消息进入APP,才能获取推送内容。且,此时程序还是会跑"didReceiveRemoteNotification"方法的。按道理这时候(他人的结论)

这个时候会走didReceiveRemoteNotification这些的方法(有很多人认为不会走,经过测试这个是会走的),但是这这里面写跳转什么的 ,就有点比较难处理了,因为didFinishLaunchingWithOptions这个方法没有走,先走的didReceiveRemoteNotification再走的 didFinishLaunchingWithOptions 。这时候很多app的基本设置,比如做的跟视图,自动登陆,等等很多的注册什么的都还没执行,就直接跳转这个是很麻烦的处理起来,所以一般是在“ didFinishLaunchingWithOptions”方法下去处理页面跳转逻辑

但是我也试过不在“ didFinishLaunchingWithOptions”做任何处理,直接都是在“didFinishLaunchingWithOptions”处理,APP也是能完美运行。如果有遇到不能直接在“didFinishLaunchingWithOptions”处理的,可以留个评论,有知道的大神也麻烦告知一下,谢谢了。
以上,简单的总结。不全面,有错误烦请指正。

参考文章

  • 苹果官方文档通知部分
  • iOS推送之远程推送
  • iOS 点击推送消息跳转页面
  • iOS 点击推送消息跳转指定界面

你可能感兴趣的:(关于iOS推送)