標籤:
這兩天由於項目需要,研究了一下百度雲推送,本來這事沒什麼多大工作量的,但註冊百度開發人員賬戶建立應用令我蛋疼菊緊了好一陣,這些東西做了對技術沒啥提升,不做又不行,必經之路。好在我耗費了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.jar並add to build path
libs/armeabi下匯入libbdpush_V1_0.so
訊息推送之百度雲推送Android整合與使用方法