推送MobPush-API說明

皮皮醬發表於2018-09-27

1. 訊息監聽介面

MobPushReceiver: 訊息監聽介面(包含接收自定義訊息、通知訊息、通知欄點選事件、別名和標籤變更操作等)

MobPush.addPushReceiver(MobPushReceiver receiver): 設定訊息監聽

MobPush.removePushReceiver(MobPushReceiver receiver): 移除訊息監聽

2. 推送開關控制介面

MobPush.stopPush(): 停止推送(停止後將不會收到推送訊息,僅可通過restartPush重新開啟)

MobPush.restartPush(): 重新開啟推送服務

MobPush.isPushStopped(): 判斷推送服務是否已經停止

3. 推送選項介面

MobPush.setSilenceTime(int startHour, int startMinute, int endHour, int endMinute): 設定通知靜音時段(開始時間小時和分鐘、結束時間小時和分鐘)

MobPush.setCustomNotification(MobPushCustomNotification customNotification): 設定自定義通知樣式

4. 業務介面

MobPush.getRegistrationId(MobPushCallback<String> callback):獲取註冊id(可與使用者id繫結,實現向指定使用者推送訊息)

別名操作:(同時只能設定一個別名,可用來標識一個使用者)

MobPush.setAlias(String alias):設定別名

MobPush.getAlias():獲取當前設定的別名

MobPush.deleteAlias():刪除別名

標籤操作:(同時可設定多個標籤,可用於多使用者訂閱標籤的方式,批量推送訊息)

MobPush.addTags(String[] tags):新增標籤

MobPush.getTags():獲取所有已新增的標籤

MobPush.deleteTags(String[] tags):刪除標籤

MobPush.cleanTags():清除所有已新增的標籤

MobPushCustomeMessage: 自定義訊息實體類

MobPushNotifyMessage: 通知訊息實體類

5. 本地通知

MobPush.addLocalNotification(MobPushLocalNotification notification):新增本地通知

MobPush.removeLocalNotification(int notificationId):移除本地通知

MobPush.clearLocalNotifications():清空本地通知

MobPushLocalNotification:本地通知訊息實體類,繼承MobPushNotifyMessage

6. API錯誤碼

API返回的錯誤碼說明如下:(詳見MobPushErrorCode.java說明)

-1 網路請求失敗

-2 請求錯誤

功能自定義和擴充套件

前言:此功能僅僅是針對push的一些使用場景而進行自定義設定。比如,通知被點選的時候:

方式一、通過介面uri進行link跳轉

首先現在Manifest檔案中進行目標Activity的uri設定,如下:

activity
    android:name=".LinkActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="com.mob.mobpush.link"
            android:scheme="mlink" />
    </intent-filter>
</activity>
複製程式碼
在Mob後臺進行推送時,通過scheme://host的格式,例如mlink://com.mob.mobpush.link,如下位置填入:

推送MobPush-API說明

配置好之後,推送就App就可以接收到推送直接開啟指定的Activity介面了。

方式二、當app顯示在前臺的時候,會觸發MobPushReceiver的onNotifyMessageOpenedReceive方法,MobPushNotifyMessage引數則是回撥的通知詳情,可以根據回撥引數進行處理(不建議使用,當程式被殺掉的情況下,啟動應用後可能無法執行到回撥方法,因為此時可能還執行到未新增監聽的程式碼);

方式三、不管app程式是否被殺掉,當點選通知後拉起應用的啟動頁面,會觸發啟動Activity的OnCreate或OnNewIntent方法,通過getIntent方法拿到回傳的Intent,遍歷getExtras,可以拿到通知詳情(建議使用);

根據方式二,MobPush以兩個場景為例子:

場景一、通過擴充套件引數實現頁面的自定義跳轉:

//自定義擴充套件欄位的key,下發通知的時候,在擴充套件欄位使用這個key
private final static String MOB_PUSH_DEMO_INTENT = "intent";
 
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	dealPushResponse(getIntent());
}
 
protected void onNewIntent(Intent intent) {
	dealPushResponse(intent);
	//需要呼叫setIntent方法,不然後面獲取到的getIntent都是上一次傳的資料
	setIntent(intent);
}
 
 
//OnCreate和OnNewIntent方法都要同時處理這個邏輯
private void dealPushResponse(Intent intent) {
   Bundle bundle = null;
   if (intent != null) {
      bundle = intent.getExtras();
      if (bundle != null) {
         Set<String> keySet = bundle.keySet();
         for (String key : keySet) {
            if (key.equals("msg")) {
               MobPushNotifyMessage notifyMessage = (MobPushNotifyMessage) bundle.get(key);
               HashMap<String, String> params = notifyMessage.getExtrasMap();
               if(params != null && params.containsKey(MOB_PUSH_DEMO_INTENT)){
                  //此處跳轉到指定頁面
                  openPage(params);
               }
            }
         }
      }
   }
}
 
private void openPage(HashMap<String, String> params){
	Intent intent = new Intent(this, JumpActivity.class);
	intent.putExtra("key1", "value1");
	intent.putExtra("key2", "value2");
	intent.putExtra("key3", "value3");
	//如上Intent,在intent.toURI();之後得到的String,如下所示,可利用這個方法識別Intent傳的引數,
	//下發的引數可以按照下面的格式傳,客戶端接收後再轉成Intent,若新增action等其他引數,可自行列印看Srting結構體;
	//#Intent;component=com.mob.demo.mobpush/.JumpActivity;S.key1=value1;S.key2=value2;S.key3=value3;end
 
	String uri;
	if(!TextUtils.isEmpty(params.get(MOB_PUSH_DEMO_INTENT))) {
		uri = params.get(MOB_PUSH_DEMO_INTENT);
		try {
			startActivity(Intent.parseUri(uri, 0));
		} catch (Throwable t){
			t.printStackTrace();
		}
	}
}
複製程式碼

場景二、通過擴充套件引數實現web介面的跳轉:
程式碼同場景一一樣,跳轉頁面的方法改成跳轉webview頁面就可以,通過引數識別,拿到需要跳轉的Url連結

private final static String MOB_PUSH_DEMO_URL = "url";
 
//OnCreate和OnNewIntent方法都要同時處理這個邏輯
private void dealPushResponse(Intent intent) {
   Bundle bundle = null;
   if (intent != null) {
      bundle = intent.getExtras();
      if (bundle != null) {
         Set<String> keySet = bundle.keySet();
         for (String key : keySet) {
            if (key.equals("msg")) {
               MobPushNotifyMessage notifyMessage = (MobPushNotifyMessage) bundle.get(key);
               HashMap<String, String> params = notifyMessage.getExtrasMap();
               if(params != null && params.containsKey(MOB_PUSH_DEMO_URL)){
                  //此處跳轉到webview頁面
                  openUrl(params);
               }
            }
         }
      }
   }
}
 
private void openUrl(HashMap<String, String> params){
   String url;
   if(!TextUtils.isEmpty(params.get(MOB_PUSH_DEMO_URL))) {
      url = params.get(MOB_PUSH_DEMO_URL);
   } else {
      url = "http://m.mob.com";
   }
   if(!url.startsWith("http://") && !url.startsWith("https://")){
      url = "http://" + url;
   }
   System.out.println("url:" + url);
   //以下程式碼為開發者自定義跳轉webview頁面,貼上使用會找不到相關類
   WebViewPage webViewPage = new WebViewPage();
   webViewPage.setJumpUrl(url);
   webViewPage.show(this, null);
}
複製程式碼

上面兩個場景的使用示例程式碼,可以參考官方demo

github.com/MobClub/Mob…