1.資源鏈接
百度官方文檔:http://push.baidu.com/doc/android/api;
百度推送SDK下載:http://push.baidu.com/sdk/push_client_sdk_for_android;
2.創建應用,在這里就不做詳細說明,保存API KEY后面會使用到
3.配置
①目前官方建議使用Android SDK API level 21以下的版本編譯工程,官方給出的解釋是:在Android5.0的機器上圖標會變成白色方塊
② 如下圖,將libs下的文件復制到自己對應的工程目錄下
③特別說明:工程中的X86無需復制.so文件,armeabi復制對應文件,如有armeabi_v7,則將armeabi文件中的.so文件復制到armeabi_v7目錄下一份
④AndroidManifest.XML文件配置(權限和聲明信息請勿修改),如下
<!-- Push service 運行需要的權限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- push service start --> <!-- 用於接收系統消息以保證PushService正常運行 --> <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver" android:process=":bdservice_v1" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="com.baidu.android.pushservice.action.notification.SHOW" /> <action android:name="com.baidu.android.pushservice.action.media.CLICK" /> <!-- 以下四項為可選的action聲明,可大大提高service存活率和消息到達速度 --> <action android:name="android.intent.action.MEDIA_MOUNTED" /> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> </intent-filter> </receiver> <!-- Push服務接收客戶端發送的各種請求--> <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver" android:process=":bdservice_v1" > <intent-filter> <action android:name="com.baidu.android.pushservice.action.METHOD" /> <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> <service android:name="com.baidu.android.pushservice.PushService"
android:exported="true" android:process=":bdservice_v1" > <intent-filter > <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" /> </intent-filter> </service> <!-- 4.4版本新增的CommandService聲明,提升小米和魅族手機上的實際推送到達率 --> <service android:name="com.baidu.android.pushservice.CommandService" android:exported="true" /> <!-- push結束 -->
⑤混淆說明:
如果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.**{*; }
⑥啟動百度雲推送:
在主Activity的onCreate方法下添加如下信息:
PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,"api_key")
注意:將api_key替換稱創建應用是分配的API KEY;不允許在Application的onCreate方法里調用startWork方法
到這里就可以可以實現我們自己的推送,當然想了解更多,請繼續。
4.解釋下幾個概念(官方摘抄過來的):
①目前支持的推送類型,有三種:
- 通知 :創建一條通知推送。通知推送會直接出現在Android的通知欄。
- 透傳消息:創建一條透傳消息推送。透傳消息會遞交給應用處理,不會直接出現在通知欄。
- 富媒體消息:富媒體也是一種通知推送,區別在於可以配置展示的模板,使通知展示更加美觀和多樣化。
富媒體簡單的說就是由圖片、聲音、視頻等交互性信息的方式,在這里與一般通知的區別不大,可以便捷的提供個性的通知
②通知范圍:
- 廣播:推送給安裝應用的所有設備。如果已安裝了Demo客戶端,可以不做其他任何設置通過發送廣播來做第一次測試。
- 單播:推送給安裝應用的某一台設備,需要填寫該設備的ChannelID。如果使用Demo客戶端進行測試,可以在Demo客戶端界面中查看到ChannelID;如果使用自己集成AndroidSDK的應用,ChannelID的獲取請參考AndroidSDK文檔。
- 標簽組播:推送給打上某一個標簽的一組設備。如果使用Demo客戶端進行測試,可以在Demo客戶端界面將設備加入到指定名稱的標簽組中,然后選擇該名稱的標簽進行推送即可(如果該標簽之前未使用過,請刷新頁面更新控制台標簽列表)每個應用最多可以定義10000個標簽;每個標簽對應的設備數沒有限制
-
批量設備:批量以單播形式推送給多台設備。對少量設備,可以通過ChannelID列表的形式設置要推送到設備;對大量設備,支持通過上傳一個設備ChannelID列表文件的方式來進行推送目標設定。
少量設備的格式: ChannelID;ChannelID,最多10個。
大量設備的格式: 每一行一個ChannelID,行末不用加分隔符,最多10000個ChannelID。Tips: "批量設備推送" 還可以設置 分類主題, 分類主題是一個自定義的字符串(不支持中文),設置成相同分類主題的多次批量設備推送在統計展示時,可以使用分類主題來聚合展示這多次批量設備推送的到達情況。例如:每一天推送一次天氣信息給10個設備,設置推送主題為"weather",然后在 推送主題統計 中可以查看weather這個主題每天的到達數量。
"批量設備" 和 "標簽組播" 的區別與選擇:兩者都是對一批用戶的推送,標簽組播相當於把要推送的設備列表預先存儲在雲端,更適用於組內設備變化不頻繁的場合,或者由客戶端主動發起變動(如用戶主動訂閱)的場合;批量設備相當於每次推送重新設置設備列表,更適合開發者每次線下重新挖掘出不同設備的場合* - 標簽組合:雲推送目前支持2個標簽之間進行交集,並集和差集的推送。 標簽組合目前暫時不支持對消息到達數量的預估
- 地理區域推送:雲推送目前支持到縣級別的行政區域下設備的推送。 地理區域推送目前暫時不支持對消息到達數量的預估
- 興趣精准推送:雲推送基於大數據,目前支持影視,醫療,游戲等多個維度的興趣的設備推送。 興趣精准推送目前暫時不支持對消息到達數量的預估
5.補充:
①自定義通知格式:
官方SDK提供CustomPushNotificationBuilder, BasicPushNotificationBuilder, setNotificationFlags, setNotificationDefaults, setStatusbarIcon,setNotificationFlags, setNotificationDefaults, setStatusbarIcon這幾個類和方法以便開發者定義自己的格式,例如:
CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder( resource.getIdentifier( "notification_custom_builder", "layout", pkgName), resource.getIdentifier("notification_icon", "id", pkgName), resource.getIdentifier("notification_title", "id", pkgName), resource.getIdentifier("notification_text", "id", pkgName)); cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL); cBuilder.setNotificationDefaults(Notification.DEFAULT_VIBRATE); cBuilder.setStatusbarIcon(this.getApplicationInfo().icon); cBuilder.setLayoutDrawable(resource.getIdentifier( "simple_notification_icon", "drawable", pkgName)); cBuilder.setNotificationSound(Uri.withAppendedPath( Audio.Media.INTERNAL_CONTENT_URI, "6").toString()); // 推送高級設置,通知欄樣式設置為下面的ID PushManager.setNotificationBuilder(this, 1, cBuilder);
②標簽設置和刪除:
public static void setTags(Context context, List tags); //設置標簽 public static void delTags(Context context, List tags); //刪除標簽 PushManager的靜態方法
③開啟地理位置推送:
// Push: 如果想基於地理位置推送,可以打開支持地理位置的推送的開關 PushManager.enableLbs(getApplicationContext()); //開啟
public static void disableLbs(Context context); //關閉
④PushMessageReceiver類:處理消息
一、onBind方法是必須的,用來處理startWork返回值;
二、onMessage用來接收透傳消息;
三、onSetTags、onDelTags、onListTags是tag相關操作的回調;
四、onNotificationClicked在通知被點擊時回調;
五、 onUnbind是stopWork接口的返回值回調
⑤、錯誤碼:
error_code | 描述 |
---|---|
0 | 綁定成功 |
10001 | 當前網絡不可用,請檢查網絡 |
10002 | 服務不可用,連接server失敗 |
10003 | 服務不可用,503錯誤 |
10101 | 應用集成方式錯誤,請檢查各項聲明和權限 |
20001 | 未知錯誤 |
30600 | 服務內部錯誤 |
30601 | 非法函數請求,請檢查您的請求內容 |
30602 | 請求參數錯誤,請檢查您的參數 |
30603 | 非法構造請求,服務端驗證失敗 |
30605 | 請求的數據在服務端不存在 |
30608 | 綁定關系不存在或未找到 |
30609 | 一個百度賬戶綁定設備超出個數限制(多台設備登錄同一個百度賬戶) |
30612 | 百度賬戶綁定應用時被禁止,需要白名單授權 |
今天就介紹到這里,歡迎大家交流和指正。