所有的蘋果設備,在聯網狀態下,都會與蘋果的服務器建立長連接
長連接的作用
時間校準
系統升級
查找我的iPhone
長連接的好處
數據傳輸速度快
數據保持最新狀態
一.開發iOS程序的推送功能, iOS端需要做的事
1.請求蘋果獲得deviceToken
2.得到蘋果返回的deviceToken,發送deviceToken給公司的服務器
- 監聽用戶對通知的點擊
二.調試iOS的遠程推送功能, 必備條件:
1.真機
2.調試推送需要的證書文件
1> aps_development.cer : 某臺電腦就能調試某個app的推送服務
2> iphone5_qq.mobileprovision : 某臺電腦就能利用某臺設備調試某個程序
三.發布具有推送服務的app
1> aps_production.cer : 如果發布的程序中包含了推送服務,就必須安裝這個證書
2> qq.mobileprovision : 某臺電腦就能發布某個程序
配置證書
真機調試用的APNs SSL證書:要在哪臺電腦上調試具有推送服務的App
發布程序用的APNs SSL證書:要在哪臺電腦上發布具有推送服務的App
最終得到2個APNs SSL證書
APNs Development iOS:真機調試用的證書
APNs Production iOS:發布程序用的證書
Paste_Image.png
證書配置03 – 生成描述文件
Paste_Image.png
證書配置04 – 安裝
Paste_Image.png
注冊遠程推送通知
客戶端如果想接收APNs的遠程推送通知,必須先注冊(得到用戶的授權)
一般在App啟動完畢后就馬上注冊
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 注冊遠程通知
UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
[application registerForRemoteNotificationTypes:type];
return YES;
}
如果是第一次注冊,會彈出對話框
注冊成功后會調用AppDelegate的下面方法,得到設備的deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"%@", deviceToken);
}
當用戶點擊遠程推送通知,會自動打開app,這里有2種情況
app并沒有關閉,一直隱藏在后臺
讓app進入前臺,并會調用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
app已經被關閉(進程已死)
啟動app,啟動完畢會調用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions參數通過UIApplicationLaunchOptionsRemoteNotificationKey取出服務器返回的字典內容
官方文檔:
Paste_Image.png
PushMeBaby
PushMeBaby是一款用來測試ANPs的開源Mac項目
它充當了服務器的作用,用法非常簡單
它負責將內容提交給蘋果的APNs服務器,蘋果的APNs服務器再將內容推送給用戶的設備
PushMeBaby的主頁
https://github.com/stefanhafeneger/PushMeBaby