创建App ID
- 登陆 苹果开发者中心 点击图标进入证书管理界面
- 在证书管理界面创建相应的APPID,Bundle ID与项目对应即可
- 创建 App ID,如果已经自动创建好了可以跳过这一步骤
-
在创建App ID 的时候在App Services内勾选Push Notifications功能,申请推送权限
到这里App ID已经创建完毕
配置和下载证书
-
选择证书管理界面 点击 ➕ 创建一个新的证书
我们直接选择创建一个测试证书
- 选择你刚刚的创建的App ID
- 按照提示导出签名证书并上传
-
进入系统自带的钥匙串访问应用,点击 钥匙串访问 ->证书助理->从证书颁发机构请求证书
填写相关信息,并且选择保存到本地磁盘
- 回到将刚刚请求完的证书上传至刚刚的页面
- 点击download 获取 aps.cer证书文件
- 双击aps.cer文件,会自动打开钥匙串程序
- 鼠标右击,点击导出p12证书
- 自定义一个密码用来保护p12证书
到此推送的p12证书已经创建完毕了,可将该证书上传至服务器
Provisioning Profile的创建
创建Provisioning Profile的前提是已经创建了待发布应用所使用的Bundle ID的App ID,而且为该App ID创建了APNs证书,也就是完成了我上面叙述的几个步骤,这个时候我们就可以来创建Provisioning Profile了。
选择Provisioning Profile,点击 ➕ 进行创建
- 这个地方红框中框出的选项依次代表
- 开发测试环境
- 上传到appstore的生产环境(如果是企业证书这里会是In House)
- 用于内部测试的生产环境
- 选择对应的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**
- 在 xcode Capabilities 开启推送功能
接入云信apns推送
完成相应证书配置
登陆云信后台 云信后台,进入证书管理界面
- 在标识管理中填入自己应用的 Bundle ID
- 将导出的好的p12证书上传到云信后台,需要注意证书一定要与项目中的环境对应,沙盒证书对应测试环境,生产证书对应线上环境,如果出现错误会导致推送收不到。
复习一下导出p12证书
- 点击download 获取 aps.cer证书文件
- 双击aps.cer文件,会自动打开钥匙串程序
- 鼠标右击,点击导出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
```