編寫push notification之獲取device token

 

iOS的通知(notifications)有兩種形式:

  • push notifications,從iOS3開始就有了,由遠程服務器發起通知
  • local notifications,從iOS4開始支持,由本地應用發起的通知

兩種通知都是爲了提醒用戶後臺執行的應用有了變化。從用戶角度來看,效果是一樣的,都是通知。只是實現的方式不一樣,對於技術實現來說。

本文主要說明push notification的device token的步驟。

可以通過《偷窺iPhone Push Notification的幕後》《iPhone的Push(推送通知)功能原理淺析》對push notification有個原理上的瞭解。

 

設備的準備

首先要知道,push notification只能在真機上運行的,無法在模擬器上使用,如果在模擬器上運行,在註冊設備的時候會有類似如下報錯:

Error in registration. Error: Error Domain=NSCocoaErrorDomain Code=3010 "remote notifications are not supported in the simulator" UserInfo=0x5d249d0 {NSLocalizedDescription=remote notifications are not supported in the simulator}

真機也要注意,如果沒有越獄,沒有問題。越獄的話,比如通過blacksnOw,因爲沒有經過iTunes,無法生成有效的設備證書(device certificate),因此註冊的時候不會成功。

檢查越獄版本是否可用,可以ssh到設備上,執行命令:

ls /var/mobile/Library/Preferences/com.apple.apsd.plist  -l

-rw——- 1 mobile mobile 119 Aug 24 19:21 /var/mobile/Library/Preferences/com.apple.apsd.plist

返回的文件大小是119,就沒有問題。

獲取device token的原理

在說操作步驟之前,先說一下獲取device token的一些原理方面的事情。

device token,即設備令牌,不是系統唯一標識(見獲取iOS設備的基本信息),需要在應用啓動時發起到apple服務器請求,註冊自己的設備和應用,並獲得這個device token。

device token有什麼用?如果應用需要push notification給手機,那麼它要有個服務器端(provider),但是它發出的信息不是直接給手機的,而是必須統一交給apple的服務器,這個服務器就是apple push notification server(apns)。apple服務器通過這個token,知道應用要發的消息是給哪個手機設備的,並轉發該消息給手機,手機再通知應用程序。

獲取device token的操作步驟

這裏主要參照了這篇文章:Programming Apple Push Notification Services

該文檔很詳細,照做就應該沒有問題。

需要注意的是identifier一定要和provision portal profile中的app id一致,即:

image

要和:

image

一致。

另外,要確保設備綁定的是唯一的profile:

image

編寫代碼,是在AppDelegate中增加兩個方法:

  • didRegisterForRemoteNotificationsWithDeviceToken:當應用第一次運行的時候,ios獲取到device token後調用,用於註冊設備到apns上之後的操作(比如將device token通知應用的服務器端provider)
  • didFailToRegisterForRemoteNotificationsWithError:如果註冊的時候失敗,ios會調用這個方法,可以打印一些報錯日誌或者提醒用戶通知不可用

另外,有一個方法需要增加內容,主要是打印日誌,說明是否已經註冊:

第一次運行帶註冊方法的應用,會看到類似這樣的提示窗口:

J%ZIE~[N)`A%S_MRQRS6I92

然後,在日誌中看到類似下面的日誌,主要是看到打印出device token的64位字符串,就說明成功了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章