当前位置 主页 > 服务器问题 > Linux/apache问题 >

    iOS10最新实现远程通知的开发教程详解

    栏目:Linux/apache问题 时间:2020-01-30 20:23

    一、iOS推送通知简介

    众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出现的Category(分类, 也可称之为快捷回复), iOS9出现的Text Input action(文本框快捷回复).

    而在iOS10, 苹果可谓是大刀阔斧般的, 对远程通知和本地通知进行了大范围的更新. iOS10推出了全新的UserNotifications框架(iOS10之前从属于UIKit框架).

    新的推送通知框架, 整合了本地推送和远程推送的点击处理方法, 使得以前专门处理推送点击的方法只能处理静默推送了.

    二、远程推送通知介绍

    1、什么是远程推送

    在联网的情况下,由远程服务器推送给客户端的通知,又称APNs(Apple Push Notification Services)不管应用是打开还是关闭的情况下,都能接收到服务器推送的远程通知在联网状态下,所有苹果设备都会与苹果服务器建立长连接

    2、远程推送的实现原理:

          1.打开App时: 发送UDIDBundleIDAPNs加密后返回deviceToken

          2.获取Token后,App调用接口,将用户身份信息和deviceToken发给服务器,服务器记录

          3.当推送消息时, 服务器按照用户身份信息找到存储的deviceToken,将消息和deviToken发送给APNs

          4.苹果的APNs通过deviceToken, 找到指定设备的指定程序, 并将消息推送给用户

    3、实现远程推送功能的前提

          1.真机

          2.调试阶段的证书

             iOS_development.cer 用于真机调试的证书

             aps_development.cer 用于真机推送调试能的证书

             xxx.mobileprovision 描述文件,记录了能够调试的手机、电脑和程序

          3.发布阶段的证书

              iOS_distribution.cer 用于发布app的证书

              aps.cer 用于发布时,让app有推送功能的证书

              xxx.mobileprovision 描述文件,记录了能够发布app的电脑

    如何配置证书, 不在本教程内, 请读者自行处理, 或者参考视频教程

    三、iOS10 全新远程通知教程

    一、 注册远程推送并获取DeviceToken

    1.创建iOS的项目,并输入项目名字

    2.在AppDelegate中导入头文件:

     #import <UserNotifications/UserNotifications.h>

    3.在application:didFinishLaunchingWithOptions方法中, 注册远程通知

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
     {
     //请求通知权限, 本地和远程共用
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {
      if (granted) { 
       NSLog(@"请求成功"); 
        } else { 
        NSLog(@"请求失败"); 
        } 
       }];
    
     //注册远程通知
     [[UIApplication sharedApplication] registerForRemoteNotifications];
    
     //设置通知的代理
     center.delegate = self;
    
     return YES;
     }