百度推送SDK之開發指南(三)
概述
Android SDK是為Android平臺開發者接入“雲推送”服務而提供開發者工具包,開發者需要在應用中正確整合Android SDK才能使安裝該應用的Android裝置接收到雲推送服務端傳送的各類訊息。
關於如何開通雲推送服務,請參考 接入指南,在開通推送服務後,可以通過快速開始一節內容瞭解如何快速構建一個Android應用並接收訊息。
快速開始
下載最新的Android SDK壓縮包並解壓,使用Eclipse或者Android Studio,匯入Android工程示例(Demo)。此時會看到Demo工程中有錯誤,把工程編碼改為UTF-8,再開啟左側目錄樹,錯誤存在於PushDemo工程下src資料夾中,com.baidu.push.example包路徑下的PushDemoActivity.java檔案中。
報錯的這一行特別提醒開發者,在特定位置上一定要填上您獲得的API Key,否則會繫結失效,無法接收到推送的訊息。
首先需要把錯誤註釋掉。
然後將AndroidManifest.xml 122行 “api_key”修改為您的API Key並儲存,如下圖所示。
右鍵點選PushDemo工程,選擇Run As --> Android Application,執行程式。
選中您已連線的手機裝置或Android虛擬機器,開始執行Demo。
開發指南
1. 整合SDK
下載最新的Android SDK壓縮包並解壓,在新建工程或已有工程中增加百度雲推送功能,如果您使用的是Demo示例,請直接跳到
匯入雲推送jar包和so檔案:
將解壓後的libs資料夾中所有檔案拷貝到您的工程的libs資料夾中。如果您的工程中沒有其他的.so檔案,建議只拷貝armeabi資料夾。如果您的工程中還使用了其他的.so檔案,只需要拷貝對應目錄下的.so檔案即可。如果你使用的Android開發環境是Android Stutio,在工程中“src/main”目錄中新建名為jniLibs的目錄,將libs資料夾中檔案拷貝到“jniLibs”目錄內。
2. 配置AndroidManifest檔案:
在當前工程的AndroidManifest.xml檔案中,新增許可權和宣告資訊(請勿修改):
<!-- Push service 執行需要的許可權 --><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid:name="android.permission.VIBRATE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.DISABLE_KEYGUARD"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!-- 富媒體需要宣告的許可權 --><uses-permissionandroid:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/><uses-permissionandroid:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/><uses-permissionandroid:name="android.permission.EXPAND_STATUS_BAR"/><!-- 適配Android N系統必需的ContentProvider寫許可權宣告,寫許可權包含應用包名--><uses-permissionandroid:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName"/><permissionandroid:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName"android:protectionLevel="signature"></permission><!-- push service start --><!-- 用於接收系統訊息以保證PushService正常執行 --><receiverandroid:name="com.baidu.android.pushservice.PushServiceReceiver"android:process=":bdservice_v1"><intent-filter><actionandroid:name="android.intent.action.BOOT_COMPLETED"/><actionandroid:name="android.net.conn.CONNECTIVITY_CHANGE"/><actionandroid:name="com.baidu.android.pushservice.action.notification.SHOW"/><actionandroid:name="com.baidu.android.pushservice.action.media.CLICK"/><!-- 以下四項為可選的action宣告,可大大提高service存活率和訊息到達速度 --><actionandroid:name="android.intent.action.MEDIA_MOUNTED"/><actionandroid:name="android.intent.action.USER_PRESENT"/><actionandroid:name="android.intent.action.ACTION_POWER_CONNECTED"/><actionandroid:name="android.intent.action.ACTION_POWER_DISCONNECTED"/></intent-filter></receiver><!-- Push服務接收客戶端傳送的各種請求--><receiverandroid:name="com.baidu.android.pushservice.RegistrationReceiver"android:process=":bdservice_v1"><intent-filter><actionandroid:name="com.baidu.android.pushservice.action.METHOD"/><actionandroid:name="com.baidu.android.pushservice.action.BIND_SYNC"/></intent-filter><intent-filter><actionandroid:name="android.intent.action.PACKAGE_REMOVED"/><dataandroid:scheme="package"/></intent-filter></receiver><serviceandroid:name="com.baidu.android.pushservice.PushService"android:exported="true"android:process=":bdservice_v1"><intent-filter><actionandroid:name="com.baidu.android.pushservice.action.PUSH_SERVICE"/></intent-filter></service><!-- 4.4版本新增的CommandService宣告,提升小米和魅族手機上的實際推送到達率 --><serviceandroid:name="com.baidu.android.pushservice.CommandService"android:exported="true"/><!-- 適配Android N系統必需的ContentProvider宣告,寫許可權包含應用包名--><providerandroid:name="com.baidu.android.pushservice.PushInfoProvider"android:authorities="YourPackageName.bdpush"android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.YourPackageName"android:protectionLevel="signature"android:exported="true"/><!-- push結束 -->
配置Manifest檔案之後,請將YourPackageName
替換成使用者自己的包名。
3. 啟動雲推送
在當前工程的主Activity的onCreate函式中,新增以下程式碼:
PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,"api_key")
其中的“API Key“需要手動修改為指定應用的API Key。
4. 自定義回撥類
在當前工程中新建一個類,右鍵點選選擇new --> Class,填寫接收雲推送回調資訊和推送到達資訊的類的類名,並點選Finish建立該類檔案(本例中使用PushTestReceiver)。
開啟新建立的類,繼承PushMessageReceiver,此時類名飄紅,移動到類名上,點選 Add unimplemented methods,過載所有的回撥函式,並列印對應資訊,如圖所示:
在當前工程的AndroidManifest.xml檔案中,新增自定義Receiver資訊如下:
<!-- 此處Receiver名字修改為當前包名路徑 --><receiverandroid:name="YourPackageName.PushTestReceiver"><intent-filter><!-- 接收push訊息 --><actionandroid:name="com.baidu.android.pushservice.action.MESSAGE"/><!-- 接收bind、setTags等method的返回結果--><actionandroid:name="com.baidu.android.pushservice.action.RECEIVE"/><!-- 接收通知點選事件,和通知自定義內容 --><actionandroid:name="com.baidu.android.pushservice.action.notification.CLICK"/></intent-filter></receiver>
5. 執行App
右鍵點選當前工程,選擇Run As --> Android Application,選中已連線的裝置或Android虛擬機器,執行該程式。如果在logcat中的回撥函式中的errorCode為0,說明已經繫結成功,並返回userid和channelid,我們就可以在雲控制檯推送通知和透傳訊息到該app了。
6. 處理推送訊息
推送
在整合SDK後,可以通過以下兩種方式推送訊息。
-
通過控制檯推送訊息。參見:管理控制檯
-
通過服務端SDK推送訊息,目前服務端提供 Java 、 PHP 和Python三種語言的SDK,其它語言可以通過包裝RestAPI使用雲推送服務,具體可參見 SDK開發指南。
接收通知訊息
當裝置接收到通知訊息後,檢視手機的通知欄,可以看到通知欄內的新通知展示。如圖:
通知到達時,當通知被使用者點選時,會回撥onNotificationClicked函式。
推送透傳訊息
當裝置接收到透傳訊息時,訊息不會在通知欄展示,只是靜默回撥開發者自定義Receiver中的onMessage函式。手機收到訊息後不會有任何現象,因為透傳訊息對使用者完全透明,使用者無法感知,便於開發者在不影響使用者的情況下對app進行操作。開發者可以通過log內容和自定義的回撥函式onMessage中列印該內容,確認訊息到達,並執行開發者指定操作。
7. 錯誤碼說明
error_code | 描述 |
---|---|
0 | 繫結成功 |
10001 | 當前網路不可用,請檢查網路 |
10002 | 服務不可用,連線server失敗 |
10003 | 服務不可用,503錯誤 |
10101 | 應用整合方式錯誤,請檢查各項宣告和許可權 |
20001 | 未知錯誤 |
30600 | 服務內部錯誤 |
30601 | 非法函式請求,請檢查您的請求內容 |
30602 | 請求引數錯誤,請檢查您的引數 |
30603 | 非法構造請求,服務端驗證失敗 |
30605 | 請求的資料在服務端不存在 |
30608 | 繫結關係不存在或未找到 |
30609 | 一個百度賬戶繫結裝置超出個數限制(多臺裝置登入同一個百度賬戶) |
30612 | 百度賬戶繫結應用時被禁止,需要白名單授權 |
8. 混淆說明
如果需要混淆app,請在混淆檔案(一般預設為Android工程下proguard-project.txt或者proguard.cfg)中新增以下說明(pushservice-VERSION.jar為整合的jar包名字,VERSION為版本名稱),防止SDK內容被二次混淆,無法收到訊息。
-libraryjars libs/pushservice-VERSION.jar
-dontwarn com.baidu.**-keep class com.baidu.**{*;}