JPush推送 之 RegistrationID 精確對點推送

轉載至:http://blog.csdn.net/gao_chun/article/details/46726091

JPush推送 之 RegistrationID 精確對點推送


獲取 RegistrationID API

支持的版本

r1.6.0 開始支持。

功能說明

RegistrationID 定義

集成了 JPush SDK 的應用程序在第一次成功註冊到 JPush 服務器時,JPush 服務器會給客戶端返回一個唯一的該設備的標識 - RegistrationID。JPush SDK 會以廣播的形式發送 RegistrationID 到應用程序。

應用程序可以把此 RegistrationID 保存以自己的應用服務器上,然後就可以根據 RegistrationID 來向設備推送消息或者通知。

API - getRegistrationID

調用此 API 來取得應用程序對應的 RegistrationID。 只有當應用程序成功註冊到 JPush 的服務器時才返回對應的值,否則返回空字符串。

支持的版本

開始支持的版本:1.6.0。

接口定義

<code style="box-sizing: border-box; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; padding: 0px; color: inherit; border-radius: 0px; background-color: transparent;"><span class="com" style="box-sizing: border-box; color: rgb(147, 161, 161);">//SDK 初次註冊成功後,開發者通過在自定義的 Receiver 裏監聽 Action - cn.jpush.android.intent.REGISTRATION 來獲取對應的 RegistrationID。註冊成功後,也可以通過此函數獲取</span><span class="pln" style="box-sizing: border-box; color: rgb(72, 72, 76);">
</span><span class="kwd" style="box-sizing: border-box; color: rgb(30, 52, 123);">public</span><span class="pln" style="box-sizing: border-box; color: rgb(72, 72, 76);"> </span><span class="kwd" style="box-sizing: border-box; color: rgb(30, 52, 123);">static</span><span class="pln" style="box-sizing: border-box; color: rgb(72, 72, 76);"> </span><span class="typ" style="box-sizing: border-box; color: teal;">String</span><span class="pln" style="box-sizing: border-box; color: rgb(72, 72, 76);"> getRegistrationID</span><span class="pun" style="box-sizing: border-box; color: rgb(147, 161, 161);">(</span><span class="typ" style="box-sizing: border-box; color: teal;">Context</span><span class="pln" style="box-sizing: border-box; color: rgb(72, 72, 76);"> context</span><span class="pun" style="box-sizing: border-box; color: rgb(147, 161, 161);">)</span></code>

附加說明

通過 RegistrationID 進行點對點推送

可以通過 RegistrationID 來推送消息和通知, 參考文檔 Push API v2, 當 receiver_type = 5 並且設置 receiver_value 爲 RegistrationID 時候即可根據 RegistrationID 推送。

注:要使用此功能,客戶端 App 一定要集成有 r1.6.0 及以上版本的 JPush Android SDK。

Android客戶端快速集成:http://docs.jpush.cn/pages/viewpage.action?pageId=3309574

詳情見JPush推送Android客戶端API:http://docs.jpush.io/client/android_api/#android-api


隨着開發者對 JPush 的使用越來越深入,不少開發者越來越想要非常精確地定位到每一個設備安裝(應用)。爲此,JPush 開放了基於 RegistrationID推送的功能。

JPush Android SDK r1.6.0 更新,主要增加了對 RegistrationID 的支持;並且服務器端 Push API 也新增此支持。另外,也改進了統計分析相關功能,以便 JPush 可以基於更完善的統計來改進推送效果。

JPush RegistrationID 是這個版本 SDK 引入的一個新概念,它唯一地標識當前這個應用安裝在這個設備上。或者說,相當於是 JPush SDK 內部的用戶ID。

開發者可通過 App 新安裝後 JPush SDK 內部註冊成功時發出的 Broadcast 來得到到這個 ID,也可以通過調用 JPushInterface.getRegistrationID() 方法來得到這個 ID。使用上,開發者取得 RegistrationID 後,上傳到自己的服務器端。之後就可以在自己的服務器調基於這個 RegistrationID 來進行推送。如下圖:


在調用了JPushInterface.init(getApplicationContext());方法後,會監聽到 cn.jpush.android.intent.REGISTRATION 廣播。可將該id上傳到服務器,服務器處理業務邏輯並給該ID推送信息。測試確認不同設備打印出的 Registration ID 不同。

JPush 之前一直支持基於 Alias (別名)的點對點推送方式,那爲什麼還要開放 RegistrationID 的點對點推送方式呢?

與 Alias 相比,RegistrationID 的有什麼不同,或者說優勢、劣勢呢?

本質上 RegistrationID 與 Alias 類似,其目的都是唯一地定位到應用安裝在一個特定的設備上。而本質的不同在於,Alias 是把映射關係保存到 JPush 的服務器上,而 RegistrationID 需要把映射關係保存到開發者業務服務器上。

這個本質的不同,決定了其特點:

  1. Alias 有個 SDK 端設置綁定關係的問題。這個設置,有可能會失敗,App 需要有處理這個暫時失敗的邏輯。另外,Alias 是不限制綁定到多個設備的,這樣要精確地定位到一個設備就不好控制。總而言之,這個綁定關係是沒有那麼精確一點的。
  2. RegistrationID 一旦生成,意味着這個設備的安裝一定存在。App 把這個 RegistrationID 保存到自己的業務服務器上,可以非常精確地定位到這臺設備(安裝這個應用)。這樣開發者的內部業務可以做比較複雜的用戶關聯關係。

或者說,使用 Alias 開發者更簡單、方便。但使用 RegistrationID 更方便於精確地定位用戶。

JPush iOS SDK 將於稍後發佈的 SDK 版本支持 RegistrationID 推送。

Android SDK 具體的更新說明,請參考最新更新頁面

RegistrationID 相關的文檔有:獲取 RegistrationID API接收推送消息 Receiver 裏關於從廣播接受 RegistrationID 部分;

Push API v2 裏關於 RegistrationID 推送參數的部分。

統計分析功能相關的文檔有:統計分析 API (Android SDK)。


 相關疑問:

請問如果用戶卸載了應用,業務服務器怎麼知道相關RegistrationID已經失效了呢?

用戶直接卸載了應用,服務器端 RegistrationID 不會失效。 也就是說,你推送可以保存離線消息,短時間內重新安裝了還可以收到消息。用戶過了一定的時間比如一個月後還沒有 online 過,會被 JPush 認爲是無效用戶。

一個RegistrationID對應一個終端嗎?當這個終端由另一個用戶登錄時,其RegistrationID是否一樣?

是的,RegistrationID 是設備級別的概念,不受你應用層的影響。你的用戶使用不同用戶登錄時,需要重新與這個 registrationID 綁定。

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