消息推送之百度雲推送Android集成與使用方法


這兩天由於項目需要,研究了一下百度雲推送,本來這事沒什麼多大工作量的,但註冊百度開發者賬戶創建應用令我蛋疼菊緊了好一陣,這些東西做了對技術沒啥提升,不做又不行,必經之路。好在我耗費了N多個毫毫秒秒後稀里嘩啦的闖了過來。

在此先吐槽一下。這個雲推送雖然沒多少東西,但對於初次接觸的人來說還是有點不利索的,所以肯定要看官方文檔,只是不知是百度哪個哥們做的文檔,pdf做的也太不地體貼了:英文字符裏面竟然有中文空格,複製到自己的項目中發現江山一片紅,孃的,這猛一看還不一定能看得出來到底是哪裏出了錯。

for instance:


what's wrong? ....

現在或許能一眼望穿bug,但當血色迷濛的時候是相當有蛋碎的快感的。


下面開始集成。

先介紹使用方法以便爽一把

 

一:使用方法

1.打開管理控制檯,找到自己創建的工程

  http://developer.baidu.com/console#app/project


2:選擇雲推送---通知:

 

 

注:用戶範圍:

所有人是向所有安裝這一app的用戶發送通知

廣播組可根據標籤向特定用戶發送通知

 

3:手機界面:

 

 

二:集成方法:

1.清單文件的配置

①:加權限

     <!-- 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.DISABLE_KEYGUARD" />

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!-- Push service 運行需要的權限 -->

②:註冊消息接收的receiver

         <receiver android:name="com.zhuim.sgghealth.MyPushMessageReceiver" >

             <intent-filter>

                 <!-- 接收push消息 -->

                 <action android:name="com.baidu.android.pushservice.action.MESSAGE" />

                <!-- 接收bind、setTags等method的返回結果 -->

                <action android:name="com.baidu.android.pushservice.action.RECEIVE" />

                <!-- 可選。接受通知點擊事件,和通知自定義內容 -->

                <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />

            </intent-filter>

        </receiver>

 

        <!-- 用於接收系統消息以保證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" />

            </intent-filter>

        </receiver>

        <!-- Push服務接收客戶端發送的各種請求 -->

        <!-- 注意:RegistrationReceiver 在2.1.1及之前版本有拼寫失誤,爲RegistratonReceiver ,用新版本SDK時請更改爲如下代碼 -->

        <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>

        <!-- Push 服務 -->

        <service

            android:name="com.baidu.android.pushservice.PushService"

            android:exported="true"

            android:process=":bdservice_v1" />

        <!-- AndroidMenifest.xml增加pushservice配置 -->

 

2:代碼文件:

①:讓推送功能起作用

在自己的主Activity中加入下面代碼,讓推送功能開始工作:

// 以apikey的方式登錄,一般放在主Activity的onCreate中

PushManager.startWork(getApplicationContext(),

PushConstants.LOGIN_TYPE_API_KEY"bYI*********************zLi3qLk");

其中的apikey是自己工程的創建時賦予的:

 

②:繼承FrontiaApplication

public class MyApp extends FrontiaApplication {

public List<Activity> activitiesList;

@Override

public void onCreate() {

// TODO Auto-generated method stub

activitiesList = new ArrayList<Activity>();

super.onCreate();

}

}

③:自定義廣播接收者:

 

public class MyPushMessageReceiver extends BroadcastReceiver {

@Override

public void onReceive(final Context context, Intent intent) {

 

if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {

// 獲取消息內容

String message = intent.getExtras().getString(

PushConstants.EXTRA_PUSH_MESSAGE_STRING);

 

else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {

// 處理綁定等方法的返回數據

// PushManager.startWork()的返回值通過PushConstants.METHOD_BIND得到

final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD);

// 方法返回錯誤碼。若綁定返回錯誤(非0),則應用將不能正常接收消息。

// 綁定失敗的原因有多種,如網絡原因,或access token過期。

// 請不要在出錯時進行簡單的startWork調用,這有可能導致死循環。

// 可以通過限制重試次數,或者在其他時機重新調用來解決。

int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS);

String content = "";

if (intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT) != null)

content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));

// 用戶在此自定義處理消息:TODO Something

 

// 通知用戶點擊事件處理

else if (intent.getAction().equals(

PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {

String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);

String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);

// 用戶在此自定義處理點擊事件:TODO Something

}

}

}

④:導入百度雲推送所需要的jar包及so文件:

 libs下導入pushservice-3.2.0.jaradd to build path

 libs/armeabi下導入libbdpush_V1_0.so

 

 

 


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