Android集成友盟集成推送方案調(diào)研

Android集成友盟集成推送方案調(diào)研

鑒于項(xiàng)目apk瘦身的需求,經(jīng)過調(diào)研,發(fā)現(xiàn)現(xiàn)有的推送集成方案可以優(yōu)化?,F(xiàn)有的推送方案是華為 + 小米 + 友盟推送,分別針對的是華為(包括榮耀)手機(jī)、小米手機(jī)、其他類型手機(jī)。這樣做的好處是,華為、小米系列的手機(jī)都可以支持離線消息,推送消息送達(dá)率有保證。缺點(diǎn)是推送的SDK的包比較大,會浪費(fèi)用戶流量。

鑒于項(xiàng)目中已經(jīng)集成了友盟統(tǒng)計(jì)相關(guān)sdk,這里決定對友盟的集成推送方案進(jìn)行調(diào)研,如果可以滿足現(xiàn)有需求,則完全可以替換現(xiàn)有推送方案。

U-push方案集成步驟

參考文檔:U-push集成文檔

集成步驟主要包括普通集成和通道集成。

1、普通集成。

這里說的普通集成,是指在華為、小米手機(jī)上不支持離線消息的情況。集成完這個步驟之后,在小米、華為手機(jī)上是收不到推送消息的。這個跟我們的需求不符,需要進(jìn)一步優(yōu)化,具體請看第2步。

  • 友盟官網(wǎng)上獲取AppKey和Umeng Message Secret,配置進(jìn)AndroidManifest.xml
  • 導(dǎo)入PushSDK
//PushSDK必須依賴基礎(chǔ)組件庫,所以需要加入對應(yīng)依賴
implementation 'com.umeng.sdk:common:1.5.3'
//PushSDK必須依賴utdid庫,所以需要加入對應(yīng)依賴
implementation 'com.umeng.sdk:utdid:1.1.5.3'
//PushSDK
implementation 'com.umeng.sdk:push:4.2.0'
  • 初始化PushSDK
UMConfigure.init(context, UMConfigure.DEVICE_TYPE_PHONE, umengMessageSecret);
  • 注冊推送服務(wù),注冊成功之后可以獲取到token。
PushAgent mPushAgent = PushAgent.getInstance(this);
//注冊推送服務(wù),每次調(diào)用register方法都會回調(diào)該接口
mPushAgent.register(new IUmengRegisterCallback() {

    @Override
    public void onSuccess(String deviceToken) {
        //注冊成功會返回device token
    }

    @Override
    public void onFailure(String s, String s1) {

    }
});
  • 自定義通知打開動作。這個動作在通知欄消息被點(diǎn)擊時觸發(fā)。
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {

    @Override
    public void dealWithCustomAction(Context context, UMessage msg) {
        Toast.makeText(context, msg.custom, Toast.LENGTH_LONG).show();
    }
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
  • 混淆配置。

2、小米、華為Push通道集成。

華為、小米對后臺進(jìn)程做了諸多限制。若使用一鍵清理,應(yīng)用的channel進(jìn)程被清除,將接收不到推送。為了增加推送的送達(dá)率,可選擇接入華為、小米托管彈窗功能,通知將由華為系統(tǒng)托管彈出。

主要步驟如下:

  • 登錄華為、小米開發(fā)平臺,創(chuàng)建對應(yīng)的應(yīng)用,啟用推送服務(wù),獲取相應(yīng)的應(yīng)用信息。
  • 導(dǎo)入華為、小米Push通道SDK
//華為Push通道
implementation 'com.umeng.sdk:push-huawei:1.0.0'
//小米Push通道
implementation 'com.umeng.sdk:push-xiaomi:1.0.0'
  • 華為、小米Push初始化

在Application類的onCreate方法中添加:

HuaWeiRegister.register(final Context context);
MiPushRegistar.register(final Context context, final String XIAOMI_ID, final String XIAOMI_KEY);

注意:
華為Push通道:
①僅在華為EMUI設(shè)備上生效。
②集成華為Push的版本暫不支持多包名。
③若使用華為Push通道,則app的targetSdkVersion必須設(shè)置為25或25以下,設(shè)置為26及以上,會導(dǎo)致EMUI 8.0設(shè)備無法彈出通知。

小米Push通道:
①僅在小米MIUI設(shè)備上生效。
②集成小米push的版本暫不支持多包名。

  • 使用華為、小米彈窗功能。

通知將由華為、小米系統(tǒng)托管彈出,點(diǎn)擊通知欄將跳轉(zhuǎn)到指定的Activity。該Activity需繼承自UmengNotifyClickActivity,同時實(shí)現(xiàn)父類的onMessage方法,對該方法的intent參數(shù)進(jìn)一步解析即可,該方法異步調(diào)用,不阻塞主線程。示例如下:

public class MipushTestActivity extends UmengNotifyClickActivity {

    private static String TAG = MipushTestActivity.class.getName();

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_mipush);
    }

    @Override
    public void onMessage(Intent intent) {
        super.onMessage(intent);  //此方法必須調(diào)用,否則無法統(tǒng)計(jì)打開數(shù)
        String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY);
        Log.i(TAG, body);
    }
}

別忘了注冊該Activity:

<activity
      android:name="com.umeng.message.example.MipushTestActivity"
      android:launchMode="singleTask"
      android:exported="true" />

在【友盟+】推送后臺發(fā)送通知時,勾選若設(shè)備離線轉(zhuǎn)為系統(tǒng)通道下發(fā),并填寫Activity的完整包路徑(該Activity需繼承自UmengNotifyClickActivity)。
[圖片上傳失敗...(image-336591-1563100816012)]

注意:

華為:
對于EMUI 4.1及以下版本系統(tǒng),若要使用華為彈窗功能,則需在華為設(shè)備上的【手機(jī)管家】App中,開啟應(yīng)用的“自啟動權(quán)限”。
使用華為彈窗下發(fā)的通知,將只能被統(tǒng)計(jì)到通知的【打開數(shù)】,而該條通知的【收到數(shù)】、【忽略數(shù)】將無法被統(tǒng)計(jì)到。

小米:
使用小米系統(tǒng)通道下發(fā)的消息,將只能被統(tǒng)計(jì)到消息的【打開數(shù)】,而該條消息的【收到數(shù)】、【忽略數(shù)】將無法被統(tǒng)計(jì)到。
若要使用小米系統(tǒng)通道下發(fā)通知,則通知的標(biāo)題(title)不允許全是空白字符且長度小于50,通知的內(nèi)容(text)不允許全是空白字符且長度小于128(通知的標(biāo)題和內(nèi)容必填,一個中英文字符均計(jì)算為1)。

在調(diào)用API接口實(shí)現(xiàn)推送消息時,如果需要使用華為、小米彈窗,需添加:

"mipush":true
"mi_activity":"com.umeng.message.example.MipushTestActivity"        //此處請?zhí)顚慉ctivity完整包路徑

API接口添加位置參考:

{
"appkey": "", 
"mi_activity": "com.umeng.message.example.MipushTestActivity"
"mipush": true,
"timestamp": 1473225266373,
"production_mode": "true",
"type": "unicast", 
"device_tokens": "", 
"payload":
    {"body": 
       {"text": "from pa36a", 
        "after_open": "go_app", 
        "ticker": "Hello World", 
        "title": "listcastpa43"
       }, 
     "display_type": "notification", 
    }
}

最后對友盟統(tǒng)計(jì)集成方案做下總結(jié):
1、在集成U-push的基礎(chǔ)上,還需要集成華為、小米Push通道。它們暫時均不支持多包名。

2、華為手機(jī)需要注意的問題:
①若使用華為Push通道,則app的targetSdkVersion必須設(shè)置為25或25以下,設(shè)置為26及以上,會導(dǎo)致EMUI 8.0設(shè)備無法彈出通知。
②對于EMUI 4.1及以下版本系統(tǒng),若要使用華為彈窗功能,則需在華為設(shè)備上的【手機(jī)管家】App中,開啟應(yīng)用的“自啟動權(quán)限”。

3、小米手機(jī)需要注意的問題:
①若要使用小米系統(tǒng)通道下發(fā)通知,則通知的標(biāo)題(title)不允許全是空白字符且長度小于50,通知的內(nèi)容(text)不允許全是空白字符且長度小于128(通知的標(biāo)題和內(nèi)容必填,一個中英文字符均計(jì)算為1)。

4、華為、小米通道的統(tǒng)計(jì)問題:
使用華為彈窗下發(fā)的通知,將只能被統(tǒng)計(jì)到通知的【打開數(shù)】,而該條通知的【收到數(shù)】、【忽略數(shù)】將無法被統(tǒng)計(jì)到。

bug解決:

1、utdid沖突:

Warning: Exception while processing task java.io.IOException: Can't write [/Users/xxx/ABC/app/build/intermediates/transforms/proguard/api_15_/release/0.jar] (Can't read [/Users/xxx/.gradle/caches/modules-2/files-2.1/com.umeng.sdk/utdid/1.1.5.3/989c3bb13060da1e3154bfe00236f76453a2725f/utdid-1.1.5.3.jar(;;;;;;**.class)] (Duplicate zip entry [utdid-1.1.5.3.jar:com/ta/utdid2/device/UTDevice.class]))

解決方式:注釋掉這里的utdid依賴。

    //PushSDK必須依賴基礎(chǔ)組件庫,所以需要加入對應(yīng)依賴
    implementation 'com.umeng.sdk:common:1.5.3'
    //PushSDK必須依賴utdid庫,所以需要加入對應(yīng)依賴
//    implementation 'com.umeng.sdk:utdid:1.1.5.3'
    //PushSDK
    implementation 'com.umeng.sdk:push:4.2.0'

參考

https://developer.umeng.com/docs/66632/detail/66744

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 由于谷歌服務(wù)在國內(nèi)不能用,Android 的推送真是一大痛點(diǎn),但也推動了國內(nèi)一批做第三方服務(wù)的廠商。第三方推送...
    U卡技術(shù)閱讀 6,790評論 1 10
  • 本文寫于2017年5月2日,隨著技術(shù)演進(jìn)可能有不準(zhǔn)確的情況,歡迎指正。 現(xiàn)狀 鑒于國內(nèi)Android開發(fā)的生態(tài)環(huán)境...
    hwren2012閱讀 5,355評論 0 6
  • 推送簡介 目前Android的推送平臺有三種類型。 1、專業(yè)第三方推送:個推(收費(fèi)服務(wù)比較好)、友盟(免費(fèi))、極光...
    zizi192閱讀 20,375評論 5 8
  • 想看吐槽的點(diǎn)鏈接: 一步步走來的消息推送 詳細(xì)集成指南,請點(diǎn)這里! android消息推送的好消息: 安卓統(tǒng)一推送...
    元濤閱讀 1,721評論 0 6
  • 新的開始 最近和之前的主管重組了團(tuán)隊(duì),開啟了新的項(xiàng)目,這是我等待了一年后最想合作的團(tuán)隊(duì)和項(xiàng)目,也是我比較擅長和喜歡...
    曾羽茉閱讀 411評論 0 0

友情鏈接更多精彩內(nèi)容