1. 程式人生 > >百度推送SDK之開發指南(三)

百度推送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示例,請直接跳到 

推送注意:如果您的Android工程使用的是Android API level 21及以上的版本,您的通知圖示背景必須是透明的,否則在Android5.0及以上的機器上通知圖示可能會變成白色的方塊。

匯入雲推送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後,可以通過以下兩種方式推送訊息。

  1. 通過控制檯推送訊息。參見:管理控制檯

  2. 通過服務端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.**{*;}