創(chuàng)建App ID
- 登陸 蘋果開發(fā)者中心 點擊圖標進入證書管理界面

- 在證書管理界面創(chuàng)建相應的APPID,Bundle ID與項目對應即可

- 創(chuàng)建 App ID,如果已經自動創(chuàng)建好了可以跳過這一步驟


-
在創(chuàng)建App ID 的時候在App Services內勾選Push Notifications功能,申請推送權限
勾選Push Notifications
到這里App ID已經創(chuàng)建完畢
配置和下載證書
-
選擇證書管理界面 點擊 ? 創(chuàng)建一個新的證書
Snip20170305_9.png 我們直接選擇創(chuàng)建一個測試證書

- 選擇你剛剛的創(chuàng)建的App ID

- 按照提示導出簽名證書并上傳

-
進入系統(tǒng)自帶的鑰匙串訪問應用,點擊 鑰匙串訪問 ->證書助理->從證書頒發(fā)機構請求證書
請求證書 填寫相關信息,并且選擇保存到本地磁盤

- 回到將剛剛請求完的證書上傳至剛剛的頁面

- 點擊download 獲取 aps.cer證書文件

- 雙擊aps.cer文件,會自動打開鑰匙串程序

- 鼠標右擊,點擊導出p12證書

- 自定義一個密碼用來保護p12證書

到此推送的p12證書已經創(chuàng)建完畢了,可將該證書上傳至服務器
Provisioning Profile的創(chuàng)建
創(chuàng)建Provisioning Profile的前提是已經創(chuàng)建了待發(fā)布應用所使用的Bundle ID的App ID,而且為該App ID創(chuàng)建了APNs證書,也就是完成了我上面敘述的幾個步驟,這個時候我們就可以來創(chuàng)建Provisioning Profile了。
選擇Provisioning Profile,點擊 ? 進行創(chuàng)建

- 這個地方紅框中框出的選項依次代表
- 開發(fā)測試環(huán)境
- 上傳到appstore的生產環(huán)境(如果是企業(yè)證書這里會是In House)
- 用于內部測試的生產環(huán)境

- 選擇對應的App ID

-
選擇所屬的開發(fā)者證書
選擇所屬的開發(fā)者證書 -
為該Provisioning Profile選擇將要安裝的設備
選擇將要安裝的設備 -
給該Provisioning Profile填寫名稱
填寫名稱 -
創(chuàng)建完成點擊下載
創(chuàng)建完成 線上環(huán)境的創(chuàng)建方式相同,你可以在填寫名稱時表明時測試環(huán)境還是先上環(huán)境
Xcode配置
雙擊下載下來的Provisioning Profile,可以添加到xcode
點擊項目,選擇目標TARGETS后進入Build Setting 界面,搜索“Code signing”,加載創(chuàng)建Provisioning Profile時指定的開發(fā)者證書

- 導入對應的Provisioning Profile** debug導入沙盒環(huán)境的Provisioning Profile,release導入生產環(huán)境的Provisioning Profile**

- 在 xcode Capabilities 開啟推送功能

接入云信apns推送
完成相應證書配置
登陸云信后臺 云信后臺,進入證書管理界面

- 在標識管理中填入自己應用的 Bundle ID

- 將導出的好的p12證書上傳到云信后臺,需要注意證書一定要與項目中的環(huán)境對應,沙盒證書對應測試環(huán)境,生產證書對應線上環(huán)境,如果出現(xiàn)錯誤會導致推送收不到。

復習一下導出p12證書
- 點擊download 獲取 aps.cer證書文件

- 雙擊aps.cer文件,會自動打開鑰匙串程序

- 鼠標右擊,點擊導出p12證書

- 自定義一個密碼用來保護p12證書

到此推送的p12證書已經創(chuàng)建完畢了,可將該證書上傳至服務器
編寫推送代碼
//
// 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環(huán)境初始化sdk并聲明后臺上傳的證書名
[[NIMSDK sharedSDK] registerWithAppID:@"你的appkey" cerName:@"云信后臺上傳的測試證書名"];
#else
// release 環(huán)境初始化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;
}
// 設置登陸回調監(jiān)聽
- (void)onLogin:(NIMLoginStep)step{
NSLog(@"%ld",(long)step);
}
// 注冊具體實現(xiàn)
- (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];
}
}
// 注冊成功 蘋果服務器下發(fā)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
```






