zoukankan      html  css  js  c++  java
  • ios 推送证书的配置和制作

    iOS 消息推送 (Message) 证书设置指南

    本文档包括:

    1. 创建App ID
    2. 创建并配置Provisioning Profiles
    3. 创建并配置Certificates
    4. 技术支持

    1. 创建App ID

    如果你已经拥有所需的App ID,请跳至创建并配置Provisioning Profiles

    登陆Apple Member Center https://developer.apple.com/membercenter

    a.选择Certificates, Identifiers & Profiles

    Certificates, Identifiers & Profiles

    b.选择Identifiers中的App IDs

    Identifiers App IDs

    c.创建Explicit App ID

    Explicit App ID

    d.App Services选择Push Notifications

    App Services

    至此bundle IdentifierIDApp ID已经创建完毕,最终形如下图: iOS App IDs

    注意

    上面在Member Center设置的App id需要和工程的bundle Identifier一致 Xcode bundle Identifiers

    2. 创建并配置Provisioning Profiles

    a.选择Development(如果是发布上线,需要选择Distribution)

    Provisioning Profile Development

    b.创建新的Provisioning Profiles,并选择之前生成好的App ID

    Create Provisioning Profile 
    Select App ID

    c.选择你自己的开发证书,并选择好需要调试Push的开发设备


    Config Provisioning Profile

    注意 
    1、如果需要的设备不在列表中,需要通过左侧的Devices中手动添加,或者通过XCode的Organizer自动添加。
    2、Provisioning Profiles创建完成后是可以重新编辑更新的

    d.下载刚刚创建Provisioning Profiles,并双击导入至电脑

    e.在XCode的Target中对应Build Settings选择这个Provisioning Profiles

    XCode Build Setting Provisioning Profile
    如果电脑中有Provisioning Profiles中引用的证书,XCode会自动选择相应的证书对代码进行签名

    至此iOS Push Notification客户端的配置就完成了,如果你一切配置正确,第一次真机启动应用时会弹出是否允许消息通知的提示框。

    3. 创建并配置Certificates

    a.创建certSigningRequest

    a1.在Mac中开启“钥匙串访问(keychain)”应用,并从证书助理中选择“从证书颁发机构请求证书”

    KeyChain Request

    a2.填写邮件地址、名称并保存到磁盘

    Create certSigningRequest

    b.根据certSigningRequest创建Certificates

    b1.回到Apple Member Center选择Development证书(如果是发布上线,需要选择Distribution)

    Certificates development

    b2.选择证书的类型“Apple Push Notification service SSL (Sandbox)”

    Apple Push Notification service SSL

    b3.选择之前创建的AppId

    Certificates, App ID

    b4.下一步提示创建certSigningRequest,我们已经创建完毕,直接下一步选择即可

    Create CSRGenerate Certificater

    b5.没有问题的话,便创建成功,下载至本地并导入钥匙串访问(KeyChain)即可

    Import KeyChain

    c.导出p12证书

    c1.在钥匙串访问(KeyChain)的我的证书中选择刚刚导入的证书,选择导出,注意不要选中私钥,并设置相应密码即可

    Export Certificates

    最后导出包含证书和密钥的p12文件

    命名为 apns-dev-gmbridge.p12

    生成这个之后后台同学需要的文件格式是pem文件,需要做一个转换

    pem文件是服务器向苹果服务器做推送时候需要的文件,主要是做服务器的同学要用,下面介绍一下pem文件的生成。

    • 打开Keychain Access,在Certificates里面找到上篇文章中介绍的包含推送的证书。分别将certificate和private key导出得到.p12文件。例如:Apple Development Push Services > Export “Apple Development Push Services ID123”,保存为 apns-dev-cert.p12。对“Private Key”做同样操作,保存为 apns-dev-key.p12 文件。
    • 需要通过终端命令将这些文件转换为PEM格式:
      openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
      openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
      此处要求输入一个密码,输入123456.
    • 移除密码(上面的123456)
      openssl rsa -in apns-dev-key.pem -out apns-dev-key.pem
    • 最后,你需要将键和许可文件合成为apns-dev.pem文件,此文件在连接到APNS时需要使用:
      cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem

    同样 Distribution Certificate 的pem文件生成方式一样。
    openssl pkcs12 -clcerts -nokeys -out apns-dis-cert.pem -in apns-dis-cert.p12
    openssl pkcs12 -nocerts -out apns-dis-key.pem -in apns-dis-key.p12
    openssl rsa -in apns-dis-key.pem -out apns-dis-key.pem
    cat apns-dis-cert.pem apns-dis-key.pem > apns-dis.pem
     
    接受push通知还需要真机的token
    使用下面这个代码可以打印出token, 在
    didRegisterForRemoteNotificationsWithDeviceToken
    这个函数里面

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
    
        ViewController *controller = [[ViewController alloc] init];
        self.window.rootViewController = controller;
        
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability)];
        
        return YES;
    }
    
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        
        NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
        NSLog(@"My token is:%@", token);
    }
    
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
        
        NSString *error_str = [NSString stringWithFormat: @"%@", error];
        NSLog(@"Failed to get token, error:%@", error_str);
    }
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
        
    }
  • 相关阅读:
    每日一题_190921
    每日一题_190920
    每日一题_190919
    2017年江苏高考数学14题
    2017年全国高中数学联赛及2017年贵州省预赛试题
    高中数学与初中数学的接轨点
    从此错位(相减)无计算
    在 LaTeX 中同步缩放 TikZ 与其中的 node
    析构函数 一定是虚函数
    Java对多线程的支持
  • 原文地址:https://www.cnblogs.com/huangzizhu/p/4137571.html
Copyright © 2011-2022 走看看