iOS推送证书设置指南

创建App ID

点击Certificates, IDs & Profiles图标
  • 在证书管理界面创建相应的APPID,Bundle ID与项目对应即可
选择APPIDs选项
  • 创建 App ID,如果已经自动创建好了可以跳过这一步骤
点击 ➕
创建App ID,Bundle ID与项目对应即可
  • 在创建App ID 的时候在App Services内勾选Push Notifications功能,申请推送权限


    勾选Push Notifications

到这里App ID已经创建完毕


配置和下载证书

  • 选择证书管理界面 点击 ➕ 创建一个新的证书


    Snip20170305_9.png
  • 我们直接选择创建一个测试证书

创建一个测试证书
  • 选择你刚刚的创建的App ID
选择配置的App ID
  • 按照提示导出签名证书并上传
签名证书
  • 进入系统自带的钥匙串访问应用,点击 钥匙串访问 ->证书助理->从证书颁发机构请求证书

    请求证书

  • 填写相关信息,并且选择保存到本地磁盘

保存到磁盘
  • 回到将刚刚请求完的证书上传至刚刚的页面
选择.certSigningRequest上传
  • 点击download 获取 aps.cer证书文件
获取 aps.cer
  • 双击aps.cer文件,会自动打开钥匙串程序
双击aps.cer文件
  • 鼠标右击,点击导出p12证书
导出p12证书
  • 自定义一个密码用来保护p12证书
设定密码

到此推送的p12证书已经创建完毕了,可将该证书上传至服务器


Provisioning Profile的创建

  • 创建Provisioning Profile的前提是已经创建了待发布应用所使用的Bundle ID的App ID,而且为该App ID创建了APNs证书,也就是完成了我上面叙述的几个步骤,这个时候我们就可以来创建Provisioning Profile了。

  • 选择Provisioning Profile,点击 ➕ 进行创建

Snip20170305_29.png
  • 这个地方红框中框出的选项依次代表
  1. 开发测试环境
  1. 上传到appstore的生产环境(如果是企业证书这里会是In House)
  2. 用于内部测试的生产环境
这里我们选择测试环境
  • 选择对应的App ID
选择对应的App ID
  • 选择所属的开发者证书


    选择所属的开发者证书
  • 为该Provisioning Profile选择将要安装的设备


    选择将要安装的设备
  • 给该Provisioning Profile填写名称


    填写名称
  • 创建完成点击下载


    创建完成
  • 线上环境的创建方式相同,你可以在填写名称时表明时测试环境还是先上环境


Xcode配置

  • 双击下载下来的Provisioning Profile,可以添加到xcode

  • 点击项目,选择目标TARGETS后进入Build Setting 界面,搜索“Code signing”,加载创建Provisioning Profile时指定的开发者证书

指定开发者证书
  • 导入对应的Provisioning Profile** debug导入沙盒环境的Provisioning Profile,release导入生产环境的Provisioning Profile**
导入Provisioning Profile
  • 在 xcode Capabilities 开启推送功能
Capabilities 开启推送

接入云信apns推送

  • 完成相应证书配置

  • 登陆云信后台 云信后台,进入证书管理界面

进入云信证书管理
  • 在标识管理中填入自己应用的 Bundle ID
Bundle ID填写
  • 将导出的好的p12证书上传到云信后台,需要注意证书一定要与项目中的环境对应,沙盒证书对应测试环境,生产证书对应线上环境,如果出现错误会导致推送收不到
上传证书

复习一下导出p12证书

  • 点击download 获取 aps.cer证书文件
获取 aps.cer
  • 双击aps.cer文件,会自动打开钥匙串程序
双击aps.cer文件
  • 鼠标右击,点击导出p12证书
导出p12证书
  • 自定义一个密码用来保护p12证书
设定密码

到此推送的p12证书已经创建完毕了,可将该证书上传至服务器

编写推送代码

//
//  AppDelegate.m
//  YXPushTester
//
//  Created by Nick Deng on 2017/3/5.
//  Copyright © 2017 UnclePluto. All rights reserved.
//

#import "AppDelegate.h"
#import "NIMSDK.h"

@interface AppDelegate () <NIMLoginManagerDelegate>

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"%@",launchOptions);
#if defined(DEBUG)||defined(_DEBUG)
    // debug环境初始化sdk并声明后台上传的证书名
    [[NIMSDK sharedSDK] registerWithAppID:@"你的appkey" cerName:@"云信后台上传的测试证书名"];  
#else
    // release 环境初始化sdk并声明后台上传的证书名
    [[NIMSDK sharedSDK] registerWithAppID:@"你的appkey" cerName:@"云信后台上传的线上证书名"];  
#endif
    [[[NIMSDK sharedSDK] loginManager] addDelegate:self];
    // 向苹果服务器注册apns服务
    [self registerAPNs]; 
    // 登陆一个云信账号,只有成功登陆后才可以收到云信推送
    [[[NIMSDK sharedSDK] loginManager] login:@"account"
                                       token:@"password"
                                  completion:^(NSError *error) {
                                      NSLog(@"%@",error);
                                  }]; 
    return YES;
}

// 设置登陆回调监听
- (void)onLogin:(NIMLoginStep)step{
    NSLog(@"%ld",(long)step);
}

// 注册具体实现
- (void)registerAPNs
{
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerForRemoteNotifications)])
    {
        UIUserNotificationType types = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |      UIRemoteNotificationTypeAlert;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types
                                                                                 categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        UIRemoteNotificationType types = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound |        UIRemoteNotificationTypeBadge;
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:types];
    }
}


// 注册成功 苹果服务器下发deviceToken
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // 将deviceToken 上传至云信服务器。这样云信服务器才知道推送到哪个设备
    [[NIMSDK sharedSDK] updateApnsToken:deviceToken]; 
    NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken:  %@", deviceToken);
    
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    NSLog(@"receive remote notification:  %@", userInfo);
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"fail to get apns token :%@",error);
}


@end

```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容