Android 百度推送服務


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的通知欄。
  • 透傳消息:創建一條透傳消息推送。透傳消息會遞交給應用處理,不會直接出現在通知欄。
  • 富媒體消息:富媒體也是一種通知推送,區別在於可以配置展示的模板,使通知展示更加美觀和多樣化。

      富媒體簡單的說就是由圖片、聲音、視頻等交互性信息的方式,在這里與一般通知的區別不大,可以便捷的提供個性的通知

  ②通知范圍:

  1. 廣播:推送給安裝應用的所有設備。如果已安裝了Demo客戶端,可以不做其他任何設置通過發送廣播來做第一次測試。
  2. 單播:推送給安裝應用的某一台設備,需要填寫該設備的ChannelID。如果使用Demo客戶端進行測試,可以在Demo客戶端界面中查看到ChannelID;如果使用自己集成AndroidSDK的應用,ChannelID的獲取請參考AndroidSDK文檔
  3. 標簽組播:推送給打上某一個標簽的一組設備。如果使用Demo客戶端進行測試,可以在Demo客戶端界面將設備加入到指定名稱的標簽組中,然后選擇該名稱的標簽進行推送即可(如果該標簽之前未使用過,請刷新頁面更新控制台標簽列表)每個應用最多可以定義10000個標簽;每個標簽對應的設備數沒有限制
  4. 批量設備:批量以單播形式推送給多台設備。對少量設備,可以通過ChannelID列表的形式設置要推送到設備;對大量設備,支持通過上傳一個設備ChannelID列表文件的方式來進行推送目標設定。
    少量設備的格式: ChannelID;ChannelID,最多10個。
    大量設備的格式: 每一行一個ChannelID,行末不用加分隔符,最多10000個ChannelID。

    Tips: "批量設備推送" 還可以設置 分類主題, 分類主題是一個自定義的字符串(不支持中文),設置成相同分類主題的多次批量設備推送在統計展示時,可以使用分類主題來聚合展示這多次批量設備推送的到達情況。例如:每一天推送一次天氣信息給10個設備,設置推送主題為"weather",然后在 推送主題統計 中可以查看weather這個主題每天的到達數量。
    "批量設備""標簽組播" 的區別與選擇:兩者都是對一批用戶的推送,標簽組播相當於把要推送的設備列表預先存儲在雲端,更適用於組內設備變化不頻繁的場合,或者由客戶端主動發起變動(如用戶主動訂閱)的場合;批量設備相當於每次推送重新設置設備列表,更適合開發者每次線下重新挖掘出不同設備的場合*

  5. 標簽組合:雲推送目前支持2個標簽之間進行交集,並集和差集的推送。 標簽組合目前暫時不支持對消息到達數量的預估
  6. 地理區域推送:雲推送目前支持到縣級別的行政區域下設備的推送。 地理區域推送目前暫時不支持對消息到達數量的預估
  7. 興趣精准推送:雲推送基於大數據,目前支持影視,醫療,游戲等多個維度的興趣的設備推送。 興趣精准推送目前暫時不支持對消息到達數量的預估                

   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 百度賬戶綁定應用時被禁止,需要白名單授權

 今天就介紹到這里,歡迎大家交流和指正。

           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM