zoukankan      html  css  js  c++  java
  • 推送通知

    远程推送
    一、开发iOS程序的推送功能,iOS端需要做的事情
    1.请求苹果获得 deviceToken 
    2.得到苹果返回的deviceToken
    3.发送diviceToken给公司的服务器
    4.监听用户对通知的点击
    二、调试iOS 的远程推送功能,必备条件:
    1.真机
    2.调试推送需要的证书文件
    1> aps_development.cer 某台电脑就能调试某个appl的推送服务
    2>ios_development.cer  让真机具备调试的能力
    3>iphone5_qq.mobileprovision 某台电脑就能利用某台设备调试某个程序
     
    3.发布具有推送服务的APP
    1>aps_production.cer : 如果发布的App中包含推送服务,那就必须安装这个证书
    2>ios_distribution.cer 让某台电脑具备发布程序的能力
    3>qq.mobileprovision:某台电脑就能发布某个程序
     
     
    二、配置证书并集成
    1.登录 Member Center —> Certificates,Identifiers & Profiles —> iOS  Apps  —> Certificates —> Development —> iOS App Development(调试证书)—> Continue —> CSR文件(苹果哪台机器能够拥有调试能力)—> 找到钥匙串(钥匙串访问 —证书助理 — 从证书颁发机构请求证书 — 证书信息 — 用户电子邮箱地址(随便写) — 常用名称(自己名字)— 存储到本地磁盘 — 继续 )
    这样就生成了一个调试证书 ios_distribution.cer
    1. 配置App ID 
      iOS  Apps — > Identifilers — > App IDs — > 选择一个ID 或者创建一个ID (就是在Register iOS App ID 旁边的加号 — >App  ID Description Name: XXXX              App ID Suffix(Explicit App ID(推送一定要用这个) —> Bundle ID —>Push Notifications  —>    Continue—> Submit  ) 然后把应用程序的ID 和服务器上的ID 做成一样 )  
       .配置通知证书
       第一种方式: 自己创建 Member Center —> Certificates,Identifiers & Profiles —> iOS  Apps  —> Certificates —> All —>Add iOS Certificate  — > Apple Push Notification service SSL (Sandbox)
       第二种方式: 
      最终生成aps_production.cer
       生成描述文件 iOS  Apps — > Identifilers — > App IDs —> iOS App IDs(在这里面找) ,,如果没有重新添加(按照配置App ID来做)
          有了App ID 之后  —> Edit —> Push Notifications —> Development SSL Certificate (配置证书) — > Create certificate… —>Continue —> Choose file(把刚才创建好的CSR文件拿到) —> Generate —> Download  生成aps_development.cer
     
    3.Device(Xcode中有 Window —> Device
     
    两个证书都添加完毕,Bundle ID 添加完毕   UIID 也添加过了,这时候就来Provising Profiles —> All  —> Add iOS Provising Profile(添加加号) —> Development —> iOS App Development —> Continue —> Select App ID —> Continue —>Select certificates —> Select All —> Continue —> Select devices  —> Select All —> Continue  —> Name this profile and generate (Profile Name: XXXX) —> generate —> Download (生成描述文件)qq.mobileprovision
     
    安装过程就是双击
    cer文件可以在钥匙串访问
    配置文件可以在Xcode 查看 Xcode —> Accounts —> View Details(这里就可以显示描述文件)
     
    Bundle ID要和服务器保持一致
     
    General —> Team(自己修改) 
    Build Settings —> Code Signing —> Code Signing Identity (可以显示开发者证书)
                                      Provisioning Profile (显示描述文件)不用管
     
    极光推送(集成)
    官网   —> 产品 —> 极光推送 —> SDK 下载 —>(iOS版本)
    创建应用 —> 应用信息(应用名称:XXX)—> iOS开发证书 (在钥匙串中把对应的P12文件导出,导出之后,提示加密(这时候 加密即可),输入本机的密码进行授权)
    开发证书密码:就是刚才存放时让加密的密码
     —> 创建应用
    这时候有AppKey 和Bundle ID
     
    接下来就是使用Xcode创建项目 
     
    1.Bundle ID 要正确
    2.General —> Team(自己修改)
    Build Settings —> Code Signing —> Code Signing Identity (可以显示开发者证书)
                                      Provisioning Profile (显示描述文件)不用管
     
    接下来就是集成SDK
    。。。。
     
    接着找到首页自己的头像 —> 控制台 —> 应用列表-应用—> 推送 —> 发送通知 —> 推送对象(iOS开发环境)— 
    设备别名(有文档,可以起别名)
      发送时间(立即)—> 立即发送
     
     
     
     
    pragma mark -一.本地通知

    #pragma mark 1. 本地通知的原理(了解)


    #pragma mark 2. 创建本地通知(掌握)
    1. 创建本地通知对象
    2. 设置属性
    3. 注册通知 , 如果是IOS7 , 这一步写完就OK
    4. 如果是iOS8 , 那么还需要授权 (设置用户可以接受那些类型的通知)


    #pragma mark 3. 通知的处理1-跳转界面(掌握)
    1. 可以实现应用程序的代理方法didReceiveLocalNotification: 获取通知的值, 来进行处理. (didReceiveLocalNotification: 只能处理应用在前台及后台情况)
    2. 应该在注册通知时 , 应该设置UserInfo来传值
    3. 应该在应用程序启动时调用的代理方法中也实现 通知处理的代码(应该判断一下key是否有值)


    #pragma mark 4. 通知的处理2-程序退出(掌握)


    #pragma mark 5. 分类的设置(了解)
    1. 创建通知时, 设置分类属性
    2. 请求权限时, 设置分类参数, 倒着退即可. 注意标志一定要设置正确
    3. 实现代理方法进行处理, 处理完成记得调用block即可



    #pragma mark - 二. 远程通知

    #pragma mark 1. 远程推送通知原理(掌握)


    #pragma mark 2. 配置证书(掌握)
    1. 配置证书>> development 调试证书
    2. 配置APPID --> 指定BundleID 不能使用通配符. 还需要勾选push notification 选项.
    3. 配置APNs调试证书 (两种方式, 第一种可以按照步骤1生成, 第二种方式找到APP ID , 然后编辑即可)
    4. 配置描述文件(包含了哪个电脑可以调试, 哪个手机可以调试, 哪个程序可以调试)
    5. 创建项目时, Xcode7以后最好一次性直接配置OK. (否则, 需要右键xcodeproj包内容 --> 打开project.pbxproj --> 搜索报错的名字, 删除即可)


    #pragma mark 3. 远程推送代码实现(掌握)
    1. 注册用户权限
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
           
            // iOS8 以后的方式
            //1. 相当于请求授权 -- 注册用户设置
            UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
           
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
           
            [application registerUserNotificationSettings:settings];
           
           
        } else {
            // 1. 注册通知 --> 苹果服务器注册 --> 需要设置类型
            // iOS7以前就这么两句OK
            UIRemoteNotificationType type = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound  | UIRemoteNotificationTypeAlert;
            [application registerForRemoteNotificationTypes:type];
        }
       
    //    //接收程序退出后, 点击通知时的处理
    //    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
    //       
    //        UILabel *label = [UILabel new];
    //        label.frame = CGRectMake(0, 0, 320, 320);
    //        label.backgroundColor = [UIColor redColor];
    //        [self.window.rootViewController.view addSubview:label];
    //    }
    //   
        return YES;
    }
     
    2. 请求到了用户权限的时候会调用的方法中注册通知
    #pragma mark 请求到了用户权限的时候会调用的方法
    - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
    {
        NSLog(@"notificationSettings: %@",notificationSettings);
       
        //2. 注册通知
        [application registerForRemoteNotifications];
    }
    3. 如果想要获取Token , 实现代理方法didRegisterForRemoteNotificationsWithDeviceToken:, 拿到Token之后, 应该发送给自家的服务器保存.
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
        NSLog(@"deviceToken: %@",deviceToken);
    }
    4. 实现接收到通知时的处理方法: didReceiveRemoteNotification. 在这里处理用户数据
        1> 在前台时, 界面没有任何提示, 所以看情况判断, 是否需要区分激活状态.
        2> 在后台时, 点击通知才会调用此代理方法
    #pragma mark 收到消息时调用的方法
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        // 判断应用是否在前台
        if (application.applicationState == UIApplicationStateActive) {
            // 自行处理逻辑
        } else {
            NSLog(@"userInfo: %@", userInfo);
           
            NSString *alertStr = userInfo[@"aps"][@"alert"];
           
            UILabel *label = [UILabel new];
            label.frame = CGRectMake(0, 0, 320, 320);
            label.text = alertStr;
            label.backgroundColor = [UIColor redColor];
            [self.window.rootViewController.view addSubview:label];
        }
       
       
    }
    #pragma mark iOS7 增加了多任务处理的能力 iOS4以前没有任何的多任务 iOS5~6伪多任务
    //iOS7以后 两个方法是替代的关系, 如果实现了下面的方法, 那么上面的方法不会执行
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
        NSLog(@"userInfo: %@", userInfo);
       
        //执行完毕需要调用block
        completionHandler(UIBackgroundFetchResultNewData);
       
    }
    5. 还需要实现应用程序启动的时候调用的方法 : 需要判断应用程序的远程通知Key是否有值, 如果有值, 那么应该做处理launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]


    #pragma mark - 三. 极光推送

    #pragma mark 1. 第三方推送SDK-极光推送的了解

    #pragma mark 2. 极光推送的集成与调试(掌握)
     
  • 相关阅读:
    SpringBoot exception异常处理机制源码解析
    集群时间同步
    VMware 克隆的相关设置
    MySQL安装
    MogliFS与spring mvc结合简单示例
    MogileFS与spring结合
    MogileFS表说明
    使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
    IAT HOOK 简单实现
    进程加载_模块隐藏
  • 原文地址:https://www.cnblogs.com/r360/p/5546630.html
Copyright © 2011-2022 走看看