友盟推送和阿里雲移動推送使用注意事項、不同點比較

友盟推送和阿里雲移動推送,都屬於阿里系的產品,在使用上很大一部分還是很相似的,阿里雲將移動推送、移動熱修復、移動測試、移動數據分析和移動用戶反饋集成到了一塊,所有的遠程依賴也都是集成在一起了,然而友盟的數據統計、概況統計、分享和推送是分開的。整體上個人覺得阿里雲的接入要比友盟明瞭簡單。

下面我們一起來看看阿里雲移動推送和友盟推送的有哪些注意事項吧!

一. 阿里雲推送的注意事項

1. appKey, appSecret一定要配置在AndroidManifest文件中,如果你是EMAS統一接入的話,需要在aliyun-emas-services.json文件中統一配置,並將json文件放到應用根目錄下。

3. 採用emas統一接入時,請勿開啓資源混淆(非代碼混淆),若必須採用資源混淆,請按原來傳參方式接入。

4. 將aliyun-emas-services.json文件放在根目錄下以後,如果提示: “File aliyun-emas-services.json is missing. The Emas Services Plugin cannot function without it”.請確保您將控制檯下載的aliyun-emas-services.json文件已經正確放置到app/目錄下。

5. 一個App會用到很多第三方,如果遇到以下問題:​ Error:Execution failed for task ‘:app:processDebugManifest’.​ Manifest merger failed with multiple errors, see logs.這樣的話就需要在Gradle Console中build run,查看具體錯誤。

主要由於不同sdk設置的allowBackup屬性不同,建議在Manifest.xml中添加:

        <Application
        ....
        android:allowBackup="false"
        tools:replace="android:allowBackup"/>

6. 添加阿里雲推送依賴後如果出現一下錯誤:

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.

請在Project 根目錄的gradle.properties文件中添加:

android.useDeprecatedNdk=true

7. 即使是Maven庫快速集成,也建議將推送所需要的權限固定權限加上

    <!-- 阿里雲推送相關權限 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.REORDER_TASKS" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

8. 接入輔助通道和輔助彈窗的話,輔助通道的sdk初始化代碼放在你application.onCreate()方法中初始通道。注意:輔助通道註冊務必在Application中執行且放在推送SDK初始化代碼之後,否則可能導致輔助通道註冊失敗

9. 輔助通道需要在各個廠商的應用市場配置appKey, appSecret,具體可以參考:移動推送輔助通道配置

10. 針對安卓8.0以上,NotificationChannel需要設置channelId,這樣才能收到推送:

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                // 通知渠道的id
                String id = "1";
                // 用戶可以看到的通知渠道的名字.
                CharSequence name = "notification channel";
                // 用戶可以看到的通知渠道的描述
                String description = "notification description";
                int importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel mChannel = new NotificationChannel(id, name, importance);
                // 配置通知渠道的屬性
                mChannel.setDescription(description);
                // 設置通知出現時的閃燈(如果 android 設備支持的話)
                mChannel.enableLights(true);
                mChannel.setLightColor(Color.RED);
                // 設置通知出現時的震動(如果 android 設備支持的話)
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                //最後在notificationmanager中創建該通知渠道
                mNotificationManager.createNotificationChannel(mChannel);
            }

以上就是阿里雲移動推送的主要注意事項,接下來我們友盟推送的注意事項。

二. 友盟推送的注意事項

1. 當友盟的依賴都加入並且初始化完成以後,需要在所有的Activity 的onCreate 方法或在應用的BaseActivity的onCreate方法中添加:

PushAgent.getInstance(context).onAppStart();

該方法是【友盟+】Push後臺進行日活統計及多維度推送的必調用方法,請務必調用!

2. 在【友盟+】消息推送服務Push後臺使用“測試模式”先要先獲取到手機的deviceToken, 然後填寫獲取到的deviceToken,將該設備添加爲測試設備,測試模式只能針對填寫deviceToken的設配進行測試,如果在測試模式使用全員發送的話,發送結果會報“篩選結果爲空”。

3. 在友盟的管理後臺一定要填寫應用的包名和服務器的IP:

4.  友盟推送點擊回調方法是放在Application裏的,如果在Activity中調用,當應用進程關閉情況下,設置無效。UmengNotificationClickHandler是在BroadcastReceiver中被調用,因此若需啓動Activity,需爲Intent添加Flag:Intent.FLAG_ACTIVITY_NEW_TASK,否則無法啓動Activity。

UmengNotificationClickHandler有四個方法:openActivity、launchApp、openUrl和dealWithCustomAction,分別是打開具體的Activity、喚醒App、跳轉到url鏈接和自定義的點擊事件。

具體的代碼如下:

UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
      //打開activity
      @Override
      public void openActivity(Context context, UMessage uMessage) {
      }

      //傳遞鏈接
      @Override
      public void openUrl(Context context, UMessage uMessage) {
        System.out.println("傳遞的url:" + uMessage.url);
        Intent intent = new Intent(context, WebViewMineActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("url", uMessage.url);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
      }

      //打開App
      @Override
      public void launchApp(Context context, UMessage uMessage) {
        UMessage uMessage1 = uMessage;
        if (uMessage != null && uMessage.extra != null) {
          String jumpUrl = uMessage.extra.get("url");
          PushJumpUtils.pushJump(jumpUrl, context, isAppRunning());
        }else {
          if (!isAppRunning()){
            Intent intent = new Intent(context, AppStartActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(intent);
          }
        }
      }

      //自定義點擊事件
      @Override
      public void dealWithCustomAction(Context context, UMessage msg) {
      }
    };
    mPushAgent.setNotificationClickHandler(notificationClickHandler);
  }

 5. 設置通知欄展示的數量

 當多條通知展示在狀態欄中,當通知欄顯示數目大於設置值,此時再有新通知到達時,會把舊的一條通知隱藏。

public void setDisplayNotificationNumber(int number);

(1)參數number可以設置爲0~10之間任意整數。當參數爲0時,表示不合並通知;

(2)當該方法存在多次調用時,一最後一次調用時的設置爲準。

6. 通過用戶的手機號或者userId來進行定向推送的話,可以使用增加、刪除、查詢別名的方式來綁定用戶:

  • 若要使用新的alias,請先調用deleteAlias接口移除掉舊的alias,再調用addAlias添加新的alias;
  • 設置alias時需要指定該alias對應的類型(alias type),例如:自有id、新浪微博、騰訊微博、豆瓣等;
  • alias名稱請不要使用URLEncode等變換處理,請使用原生字符串;
  • alias的綁定是需要獲取到deviceToken爲前提的,最好是在註冊即enable的回調接口中進行alias的綁定,此時可以保證獲取到deviceToken;
  • alias原有的addExclusiveAlias和removeAlias接口均已廢棄,請使用新接口.

詳細使用代碼如下:

//別名增加,將某一類型的別名ID綁定至某設備,老的綁定設備信息還在,別名ID和device_token是一對多的映射關係
mPushAgent.addAlias("別名ID", "自定義類型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});
//別名綁定,將某一類型的別名ID綁定至某設備,老的綁定設備信息被覆蓋,別名ID和deviceToken是一對一的映射關係
mPushAgent.setAlias("別名ID", "自定義類型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});
//移除別名ID
mPushAgent.deleteAlias("別名ID", "自定義類型", new UTrack.ICallBack() {

    @Override
    public void onMessage(boolean isSuccess, String message) {

    }

});

7. 集成華爲廠商通道SDK後,需要在華爲應用市場後臺配置消息回執纔可以正常取到通過華爲通道下發消息的收到數等數據,配置成功後,消息回執位置會顯示如下信息:1操作方法:

  1. 進入華爲Push服務後臺,點擊“操作-修改”進入設置PUSH服務信息頁面
  2. 在“消息回執”區域中,選擇開通回執,並分別在“回調地址”和“HTTPS證書”裏輸入以下內容
  • 回調地址:
https://agoo-ack.m.taobao.com/hw/
  • HTTPS證書:
-----BEGIN CERTIFICATE-----
MIIEaTCCA1GgAwIBAgILBAAAAAABRE7wQkcwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
MDBaFw0yNDAyMjAxMDAwMDBaMGYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMTwwOgYDVQQDEzNHbG9iYWxTaWduIE9yZ2FuaXphdGlvbiBW
YWxpZGF0aW9uIENBIC0gU0hBMjU2IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDHDmw/I5N/zHClnSDDDlM/fsBOwphJykfVI+8DNIV0yKMCLkZc
C33JiJ1Pi/D4nGyMVTXbv/Kz6vvjVudKRtkTIso21ZvBqOOWQ5PyDLzm+ebomchj
SHh/VzZpGhkdWtHUfcKc1H/hgBKueuqI6lfYygoKOhJJomIZeg0k9zfrtHOSewUj
mxK1zusp36QUArkBpdSmnENkiN74fv7j9R7l/tyjqORmMdlMJekYuYlZCa7pnRxt
Nw9KHjUgKOKv1CGLAcRFrW4rY6uSa2EKTSDtc7p8zv4WtdufgPDWi2zZCHlKT3hl
2pK8vjX5s8T5J4BO/5ZS5gIg4Qdz6V0rvbLxAgMBAAGjggElMIIBITAOBgNVHQ8B
Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUlt5h8b0cFilT
HMDMfTuDAEDmGnwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYIKwYBBQUHAgEWJmh0
dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMDMGA1UdHwQsMCow
KKAmoCSGImh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5uZXQvcm9vdC5jcmwwPQYIKwYB
BQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNv
bS9yb290cjEwHwYDVR0jBBgwFoAUYHtmGkUNl8qJUC99BM00qP/8/UswDQYJKoZI
hvcNAQELBQADggEBAEYq7l69rgFgNzERhnF0tkZJyBAW/i9iIxerH4f4gu3K3w4s
32R1juUYcqeMOovJrKV3UPfvnqTgoI8UV6MqX+x+bRDmuo2wCId2Dkyy2VG7EQLy
XN0cvfNVlg/UBsD84iOKJHDTu/B5GqdhcIOKrwbFINihY9Bsrk8y1658GEV1BSl3
30JAZGSGvip2CTFvHST0mdCF/vIhCPnG9vHQWe3WVjwIKANnuvD58ZAWR65n5ryA
SOlCdjSXVWkkDoPWoC209fN5ikkodBpBocLTJIg1MGCUF7ThBCIxPTsvFwayuJ2G
K1pp74P1S8SqtCr4fKGxhZSM9AyHDPSsQPhZSZg=
-----END CERTIFICATE-----

點擊“測試回執”,提示“測試成功”則表示配置成功1-16

 以上的配置一定要配置,否則收不到華爲廠商渠道的推送,並且華爲廠商渠道推送的消息是有延時的,如果發送十分之後還未收到推送,那就真的收不到了,我這邊諮詢華爲官方,華爲廠商渠道推送到達率爲91%,我自己實際測試沒有這麼高。

8. 友盟推送和阿里雲系第三方的依賴衝突

關於依賴衝突這個真的很頭疼,友盟官方給的解決方案是手動接入,我自己試了一下確實可以解決問題,但是比較麻煩,so文件可能會報重複錯誤,所以我採用在阿里雲第三方過濾重複依賴。我項目中主要是熱修復和友盟推送依賴衝突,我是在熱修復中過濾依賴衝突的:

compile('com.aliyun.ams:alicloud-android-hotfix:3.2.8') {
        exclude(module: 'alicloud-android-ut')
        exclude(module: 'alicloud-android-utdid')
        exclude(module: 'alicloud-android-utils')
    }

以上就是阿里雲移動推送和友盟推送的注意事項,要說到兩者的不同點,最直觀的就是,阿里雲將所有的功能都集中到了一起,使用起來更加方便;友盟是推送界的元老,推送渠道共享,也是它的一大亮點,同時針對安卓8.0的適配做的比阿里的好。後續再有注意點我會繼續完善,有指正和添加之處,請留言評論告知我,謝謝!

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