1. 程式人生 > >整合友盟推送android

整合友盟推送android

這幾天專案要整合友盟推送,官網雖然有很全文件 ,但是不夠詳細,寫個部落格記錄一下。

使用感受

*文件不那麼詳細,不那麼通熟易懂。

*推送訊息傳送,延遲好高!

*訊息狀態即使顯示為傳送成功了,到達客戶端也許還是要等。

*沒有說清楚各個方法會在什麼時候呼叫。

*首先去官網 開啟友盟的文件  此時版本是2.7.0 ,前面簡單的就不多說了。

*下載demo看一下 格式就是這樣的


注:PushExample是推送的demo,PushSDK是demo所需要的包。

        在Eclipse裡面PushSDK就是liarbry,在AndroidStudio裡面就是module

在應用的主Activity onCreate()

 函式中開啟推送服務

PushAgent mPushAgent = PushAgent.getInstance(context);
mPushAgent.enable();//開啟客戶端通知服務mPushAgent.disable();//關閉客戶端通知服務mPushAgent.isEnabled();//返回推送服務是否可用PushAgent.getInstance(context).onAppStart();//統計日活資料,需要在應用主要的activity裡面呼叫此方法。(請務必)
String device_token = UmengRegistrar.getRegistrationId(context)//獲取device_token,此引數可以用於測試模式,發訊息時可以只讓這個使用者收到訊息。

友盟可以的自定義

*自定義訊息和。

*自定義訊息的行為。

*自定義訊息點選事件。

*自定義訊息

自定義訊息傳送到客戶端響應  dealWithCustomMessage(fianl Context context,final UMessage msg)

推送訊息傳送到客戶端響應      getNotification(fianl Context context,final UMessage msg)

兩者不同事執行,互不影響。

UmengMessageHandler messageHandler = new UmengMessageHandler(){
/**
          * 參考整合文件的
1.6.3 * http://dev.umeng.com/push/android/integration#1_6_3 * */ @Override public void dealWithCustomMessage(final Context context, final UMessage msg) { new Handler().post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub // 對自定義訊息的處理方式,點選或者忽略 boolean isClickOrDismissed = true; Toast.makeText(context,"-自定義訊息"+msg.text,Toast.LENGTH_SHORT).show(); if(isClickOrDismissed) { //自定義訊息的點選統計 UTrack.getInstance(getApplicationContext()).trackMsgClick(msg); } else { //自定義訊息的忽略統計 UTrack.getInstance(getApplicationContext()).trackMsgDismissed(msg); } // Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show(); } }); } /** * 參考整合文件的1.6.4 * http://dev.umeng.com/push/android/integration#1_6_4 * */ @Override public Notification getNotification(Context context, UMessage msg) { Toast.makeText(context, "收到一條訊息"+msg.custom, Toast.LENGTH_LONG).show(); Log.e("---->getNotification","msg.builder_id = "+msg.builder_id+" msg.title = "+msg.title+" msg.text"+msg.text+" msg.ticker"+msg.ticker); switch (msg.builder_id) { case 1: NotificationCompat.Builder builder = new NotificationCompat.Builder(context); RemoteViews myNotificationView = new RemoteViews(context.getPackageName(), R.layout.notification_view); myNotificationView.setTextViewText(R.id.notification_title, msg.title); myNotificationView.setTextViewText(R.id.notification_text, msg.text); myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg)); myNotificationView.setImageViewResource(R.id.notification_small_icon, getSmallIconId(context, msg)); builder.setContent(myNotificationView) .setContentTitle(msg.title) .setSmallIcon(getSmallIconId(context, msg)) .setContentText(msg.text) .setTicker(msg.ticker) .setAutoCancel(true); Notification mNotification = builder.build(); //由於Android v4包的bug,在2.3及以下系統,Builder創建出來的Notification,並沒有設定RemoteView,故需要新增此程式碼 mNotification.contentView = myNotificationView; return mNotification; default: //預設為0,若填寫的builder_id並不存在,也使用預設。 return super.getNotification(context, msg); } } }; mPushAgent.setMessageHandler(messageHandler);


*自定義行為

launchApp、openUrl、openActivity這三個方法可以由訊息推送SDK自動完成

自定義行為在點選推送訊息時觸發。


*自定義推送訊息點選事件。

自定義推送訊息點選事件在程式碼裡面  msg.custom為自定義訊息的內容,推送訊息的msg.custom為""。

UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler(){
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
Toast.makeText(context, "點選"+msg.custom, Toast.LENGTH_LONG).show();
}
};
//使用自定義的NotificationHandler,來結合友盟統計處理訊息通知
//參考http://bbs.umeng.com/thread-11112-1-1.html
//CustomNotificationHandler notificationClickHandler = new CustomNotificationHandler();
mPushAgent.setNotificationClickHandler(notificationClickHandler);

友盟訊息封裝在  Umessage 類中