這兩天由於項目需要,研究了一下百度雲推送,本來這事沒什麼多大工作量的,但註冊百度開發者賬戶創建應用令我蛋疼菊緊了好一陣,這些東西做了對技術沒啥提升,不做又不行,必經之路。好在我耗費了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