<var id="11116"><rt id="11116"></rt></var><var id="11116"></var>
  • <var id="11116"><rt id="11116"><big id="11116"></big></rt></var>

  • <acronym id="11116"><form id="11116"></form></acronym>
  • <var id="11116"></var>
    <code id="11116"><rt id="11116"></rt></code>
    <label id="11116"></label>
    <acronym id="11116"><form id="11116"></form></acronym>
    Mobpush 更新時間:2019-06-19 11:20

    iOS

    Q1:靜默推送和正常推送的區別

    A1:正常推送用戶會收到推送內容、聲音,應用處于后臺或者kill點擊推送內容進入APP后才會會進入回調macOS 10.15 CatalinamacOS 10.15 Catalina

    靜默推送是一種特殊的遠程推送,沒有推送內容聲音,不用點擊推送內容也不用進入APP就會執行回調,用戶毫無感覺


    Q2:mobpush如何語音推送問題

    A2:語音推送需要富媒體,富媒體已經支持語音,圖片,視頻,并且支持ios10以上


    Q3:報錯:Undefined symbols for architecture arm64:

    ??"_OBJC_CLASS_$_MobPushServiceExtension", referenced from:

    ? ? ??objc-class-ref in NotificationService.o

    ld: symbol(s) not found for architecture arm64

    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    A3:未添加 MobPushServiceExtension 依賴庫



    Q4:企業賬號的證書能否 使用mobpush

    A4:企業賬號的證書也可以 使用mobpush


    Q5:后臺顯示發送成功,工程有收到的回調,但是沒彈窗推送消息

    A5:configuration.types = MPushAuthorizationOptionsBadge | MPushAuthorizationOptionsSound | MPushAuthorizationOptionsAlert; ? ?這么配置,不要配置None


    Q6:{"statue":4801,"error":"請求IP不匹配或者未設置"}

    A6:服務器是多IP,后臺只配置了一個IP


    Q7:后臺推送是提示“無推送目標設備”

    A7:1 檢查下 證書

    2 推送的環境和應用的環境是否一致

    3?添加這個代碼

    4 定向推送的目標工程中未設置(標簽,別名)


    Q8:推送app在后臺收不到,打開app后才能收到,log提示:BadDeviceToken?

    A8:后臺走APNs通道,前臺走mobpush通道:證書配置,推送環境問題



    Android

    Q1:mobpush是否支持自定義提示音跟震動?

    A1:目前只支持系統默認的,不可以自定義


    Q2:MobPush的廠商推送和應用使用的其他第三方產品中的廠商推送沖突了,如何解決?

    A2:首先,在build.gradle的MobPush{}配置中照常配置廠商信息;


    然后,在build.gradle文件最后添加:


    configurations.all {

    excludegroup:'com.mob.push.plugins',module:'huawei'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //屏蔽MobPush提供的華為廠商包

    exclude group: 'com.mob.push.plugins', module: 'meizu'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//屏蔽MobPush提供的魅族廠商包

    exclude group: 'com.mob.push.plugins', module: 'xiaomi'? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//屏蔽MobPush提供的小米廠商包

    exclude group: 'com.mob.push.plugins', module: 'vivo'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//屏蔽MobPush提供的vivo廠商包

    exclude group: 'com.mob.push.plugins', module: 'oppo'? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//屏蔽MobPush提供的oppo廠商包

    exclude group: 'com.google.firebase', module: 'firebase-messaging'? ? ? ? ? //屏蔽MobPush提供的FCM廠商包

    }哪個廠商沖突,exclude哪個廠商就可以。


    Q3:mobpush關于不同設備角標問題能否設置呢?

    A3:

    1.小米手機,發通知可顯示角標,設置里有是否顯示角標開關

    2.華為手機,不顯示角標

    3.魅族手機沒有角標

    4.OPPO手機只對微信QQ和他自身部分應用開發角標功能

    5.vivo手機也是沒有角標的,微信會顯示是因為微信單獨對vivo做了適配處理


    Q4:unity2017集成mobpush報錯?

    A4:檢查下gradle版本是否是2.X的,如果不是改成2.X使用


    Q5:如果應用使用的其他第三方產品中的魅族廠商推送和MobPush的魅族廠商推送沖突了,推送時其中一個不起作用的正確處理方式

    A5:由于魅族廠商推送對接收監聽回調只取AndroidManifest.xml中配置的第一個Reciever,所以誰在前面配置哪個產品就生效,后面配置多少個魅族廠商推送回調監聽都無效。

    解決方法:

    自定義一個Receiver,繼承自MzPushMessageReceiver,重新里面所有的方法,然后這個自定義的Receiver里調用MobPush的魅族回調和第三方產品的魅族回調;然后再AndroidManifest.xml文件中進行配置:

    <receiver

    android:name="自定義Receiver">


    <intent-filter>


    <action

    android:name="com.meizu.flyme.push.intent.MESSAGE" />


    <action

    android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />


    <action

    android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />


    <action

    android:name="com.meizu.c2dm.intent.REGISTRATION" />


    <action

    android:name="com.meizu.c2dm.intent.RECEIVE" />


    <category

    android:name="包名" />

    </intent-filter>

    </receiver>


    在自定義的Receiver里實現示例:

    public class MyReceiver extends MzPushMessageReceiver {

    private OtherReceiver otherReceiver;

    private PushMeiZuRevicer mobpushMeiZuReceiver;


    public MyReceiver() {

    otherReceiver = new OtherReceiver();

    mobpushMeiZuReceiver = new PushMeiZuRevicer();

    }


    @Override

    public void onPushStatus(Context context, PushSwitchStatus pushSwitchStatus) {

    otherReceiver.onPushStatus(context, pushSwitchStatus);

    mobpushMeiZuReceiver.onPushStatus(context, pushSwitchStatus);

    }


    @Override

    public void onRegisterStatus(Context context, RegisterStatus registerStatus) {

    otherReceiver.onRegisterStatus(context, registerStatus);

    mobpushMeiZuReceiver.onRegisterStatus(context, registerStatus);

    }


    @Override

    public void onRegister(Context context, String s) {

    otherReceiver.onRegister(context, s);

    mobpushMeiZuReceiver.onRegister(context, s);

    }


    @Override

    public void onUnRegister(Context context, boolean b) {

    otherReceiver.onUnRegister(context, b);

    mobpushMeiZuReceiver.onUnRegister(context, b);

    }



    @Override

    public void onUnRegisterStatus(Context context, UnRegisterStatus unRegisterStatus) {

    otherReceiver.onUnRegisterStatus(context, unRegisterStatus);

    mobpushMeiZuReceiver.onUnRegisterStatus(context, unRegisterStatus);

    }


    @Override

    public void onSubTagsStatus(Context context, SubTagsStatus subTagsStatus) {

    otherReceiver.onSubTagsStatus(context, subTagsStatus);

    mobpushMeiZuReceiver.onSubTagsStatus(context, subTagsStatus);

    }


    @Override

    public void onSubAliasStatus(Context context, SubAliasStatus subAliasStatus) {

    otherReceiver.onSubAliasStatus(context, subAliasStatus);

    mobpushMeiZuReceiver.onSubAliasStatus(context, subAliasStatus);

    }


    @Override

    public void onNotificationClicked(Context context, MzPushMessage mzPushMessage) {

    otherReceiver.onNotificationClicked(context, mzPushMessage);

    mobpushMeiZuReceiver.onNotificationClicked(context, mzPushMessage);

    }


    @Override

    public void onNotificationArrived(Context context, MzPushMessage mzPushMessage) {

    otherReceiver.onNotificationArrived(context, mzPushMessage);

    mobpushMeiZuReceiver.onNotificationArrived(context, mzPushMessage);

    }


    @Override

    public void onNotifyMessageArrived(Context context, String s) {

    otherReceiver.onNotifyMessageArrived(context, s);

    mobpushMeiZuReceiver.onNotifyMessageArrived(context, s);

    }

    }


    Q6:mobpush是否支持自定義提示音跟震動?

    A6:目前只支持系統默認的,不可以自定義


    Q7:mobpush關于不同設備角標問題能否設置呢?

    A7:

    1.小米手機,發通知可顯示角標,設置里有是否顯示角標開關

    2.華為手機,不顯示角標

    3.魅族手機沒有角標

    4.OPPO手機只對微信QQ和他自身部分應用開發角標功能

    5.vivo手機也是沒有角標的,微信會顯示是因為微信單獨對vivo做了適配處理


    Q8:是不是所有vivo機型和Funtouch OS都支持vivo 廠商推送?

    A8:目前vivo 廠商推送僅支持下表中的機型和對應的系統及以上系統。


    Q9:如果應用在android9的設備獲取不到注冊的rid怎么辦?

    A9:如果在其他版本的android手機可以獲取到注冊id,在android9手機收不到時請確認下manifest里的targetSdkVersion是否大于27,大于27時需要在manifest中添加android:usesCleartextTraffic='true'。


    Q10:如果推送配置了FCM廠商,同時需要使用firebase的其他產品(ads等產品時),編譯報錯了,如何處理?

    A10:1.單獨配置配置ads跟FCM時,他們所依賴的相同庫版本是否一致,如果不一致的話,需要進行版本一致;


    2.進行版本統一,在app moudle的build.gradle中添加


    configurations.all { exclude group: 'com.google.firebase',moudle:'firebase-messaging' }


    同時在app下的build.gradle里dependencies里添加:


    compile'com.google.firebase:firebase-messaging:17.1.0'


    Q11:如果應用在android9的設備獲取不到注冊的rid怎么辦?

    A11:如果在其他版本的android手機可以獲取到注冊id,在android9手機收不到時請確認下manifest里的targetSdkVersion是否大于27,大于27時需要在manifest中添加android:usesCleartextTraffic='true'。


    Q12:一臺設備能設置幾個別名?不同的設備能設置相同的別名嗎?

    A12:同一個APP,一臺設備只能設置一個別名,新設置的別名會覆蓋之前的別名。不同的設備不能設置同一個別名,最后一個設備設置的生效,其他設備的別名都將失效。


    Q13:配置了默認點擊跳轉界面,對所有通道都有效嗎?

    A13:不是,對MobPush、魅族、小米、華為、OPPO通道有效;對FCM通道無效。


    Q14:如何獲取推送的附加字段?何獲取推

    I.MobPush、魅族推送、小米推送:

    MobPush SDK內部已進行統一封裝處理,走MobPush、魅族、小米通道推送時,在點擊跳轉默認界面里,通過getIntent()獲取跳轉的Intent,利用Intent的getExtras()獲取附加數據,通過msg字段獲取推送消息實體,附加數據在推送消息實體的getExtrasMap()獲取推送消息添加的附加數據。以Demo為例,點擊通知默認跳轉MainActivity界面,在此界面的onCreate()和OnNewIntent()中處理Intent:

    1.在onCreate()和onNewIntent()獲取intent


    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中key為msg的數據

    4.獲取msg中extrasMap

    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle?bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    if (key.equals("msg")) {

    MobPushNotifyMessage notifyMessage = (MobPushNotifyMessage) bundle.getSerializable("msg");

    if (notifyMessage != null) {

    HashMap<String, String> extrasMap = notifyMessage.getExtrasMap();

    //hashMap里包含的就是附加數據了,根據附加數據的key獲取對應值

    }

    }

    }

    II.華為通道、OPPO通道:

    由于華為推送點擊通知回調存在bug,某些華為機型上不是每次點擊通知都會回調,華為官方后續會把點擊通知回調廢棄,故采用了推薦的Intent Uri方式推送,附加數據是放在Intent Uri上的,MobPush SDK內部不能封裝處理,需用戶自行在跳轉界面進行附加數據的獲取和處理:

    獲取附加數據和處理方法:


    1.在onCreate()和onNewIntent()獲取intent

    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中附加數據,而此處針對華為通道來說,由于MobPush SDK內部未進行處理,附加數據都是暴露的,可通過推送時添加的附加數據key直接獲取值,無需通過msg獲取MobPushNotifyMessage推送消息實體,再通過消息實體獲取附加數據。

    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    //通過key獲取bundle中的key對應的值。就是附加數據了

    }

    III.OPPO通道:

    由于OPPO推送暫不支持推送回調,MobPush SDK內部也無法進行封裝處理,需用戶自行在跳轉界面進行附加數據的獲取和處理。

    獲取附加數據和處理方法:


    1.在onCreate()和onNewIntent()獲取intent

    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中附加數據,而此處針對OPPO通道來說,由于MobPush SDK內部未進行處理,附加數據都是暴露的,可通過推送時添加的附加數據key直接獲取值,無需通過msg獲取MobPushNotifyMessage推送消息實體,再通過消息實體獲取附加數據。


    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    if (key.equals("pluginExtra")) {

    String v = String.valueOf(bundle.get("pluginExtra"));

    if (!TextUtils.isEmpty(v)) {

    HashMap hashMap = new Hashon().fromJson(v);

    //hashMap里包含的就是附加數據了,根據附加數據的key獲取對應值

    }

    }

    }


    的附加字段?

    A14:

    I.MobPush、魅族推送、小米推送:

    MobPush SDK內部已進行統一封裝處理,走MobPush、魅族、小米通道推送時,在點擊跳轉默認界面里,通過getIntent()獲取跳轉的Intent,利用Intent的getExtras()獲取附加數據,通過msg字段獲取推送消息實體,附加數據在推送消息實體的getExtrasMap()獲取推送消息添加的附加數據。以Demo為例,點擊通知默認跳轉MainActivity界面,在此界面的onCreate()和OnNewIntent()中處理Intent:

    1.在onCreate()和onNewIntent()獲取intent


    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中key為msg的數據

    4.獲取msg中extrasMap

    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle?bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    if (key.equals("msg")) {

    MobPushNotifyMessage notifyMessage = (MobPushNotifyMessage) bundle.getSerializable("msg");

    if (notifyMessage != null) {

    HashMap<String, String> extrasMap = notifyMessage.getExtrasMap();

    //hashMap里包含的就是附加數據了,根據附加數據的key獲取對應值

    }

    }

    }

    II.華為通道、OPPO通道:

    由于華為推送點擊通知回調存在bug,某些華為機型上不是每次點擊通知都會回調,華為官方后續會把點擊通知回調廢棄,故采用了推薦的Intent Uri方式推送,附加數據是放在Intent Uri上的,MobPush SDK內部不能封裝處理,需用戶自行在跳轉界面進行附加數據的獲取和處理:

    獲取附加數據和處理方法:


    1.在onCreate()和onNewIntent()獲取intent

    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中附加數據,而此處針對華為通道來說,由于MobPush SDK內部未進行處理,附加數據都是暴露的,可通過推送時添加的附加數據key直接獲取值,無需通過msg獲取MobPushNotifyMessage推送消息實體,再通過消息實體獲取附加數據。


    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    //通過key獲取bundle中的key對應的值。就是附加數據了

    }

    III.OPPO通道:

    由于OPPO推送暫不支持推送回調,MobPush SDK內部也無法進行封裝處理,需用戶自行在跳轉界面進行附加數據的獲取和處理。

    獲取附加數據和處理方法:


    1.在onCreate()和onNewIntent()獲取intent

    2.通過intent.getExtras()獲取Bundle

    3.獲取Bundle中附加數據,而此處針對OPPO通道來說,由于MobPush SDK內部未進行處理,附加數據都是暴露的,可通過推送時添加的附加數據key直接獲取值,無需通過msg獲取MobPushNotifyMessage推送消息實體,再通過消息實體獲取附加數據。


    具體代碼示例:


    1.在onCreate()和onNewIntent()中獲取intent


    2.處理intent:

    Bundle bundle = intent.getExtras();

    if (bundle == null) {

    return;

    }

    Set<String> keySet = bundle.keySet();

    if (keySet == null || keySet.isEmpty()) {

    return;

    }

    for (String key : keySet) {

    if (key.equals("pluginExtra")) {

    String v = String.valueOf(bundle.get("pluginExtra"));

    if (!TextUtils.isEmpty(v)) {

    HashMap hashMap = new Hashon().fromJson(v);

    //hashMap里包含的就是附加數據了,根據附加數據的key獲取對應值

    }

    }

    }

    Ⅳ.FCM通道:

    由于FCM推送分應用在前臺和非前臺兩種情況,在前臺時MobPush SDK內部已經處理,獲取附加數據可參考上面MobPush、魅族推送、小米推送方式;在非前臺時沒有相應回調,點擊通知時,默認跳轉啟動頁,同時配置了默認點擊跳轉主頁也是無效的,都是跳轉啟動頁,在啟動頁里onCreate()和onNewIntent()獲取intent并進行附加數據處理:

    前臺時處理可參看MobPush、魅族推送、小米推送方式

    非前臺時需在啟動頁的onCreate()和onNewIntent()獲取intent,處理附加數據邏輯可參數華為推送處理方式,直接獲取Bundle中附加數據key相對應的值即可,是沒有任何包裹,暴露的。


    Q15:OPPO推送時按全部人群進行推送,為什么有的OPPO設備接收不到?

    A15:因為OPPO推送對應全部人群這種全量推送是有個時間限制規則的,當全量推送時當天新注冊的OPPO設備是不生效的,第二天才生效,被全量推送計算在目標設備組中,T+1規則。

    而對應單一OPPO設備推送時,沒有T+1規則限制,注冊成功即立即生效。


    Q16:廠商推送打開通知都會有回調嗎?

    A16:不是都有回調,OPPO推送沒有接收通知和打開通知的回調;FCM推送在應用處于后臺時或者應用進程被殺掉時沒有接收通知和打開通知的回調。


    Q17:應用在前臺時,MobPush通道推送接收不到?

    A17:應用在前臺時,接收不到MobPush通道推送的情況,排查方法:

    1.檢查手機網絡是否正常

    2.檢查手機通知權限是否打開。

    3.是否在通知欄不重要的通知里

    4.檢查應用配置是否正確。

    5.如果自定義了Application,需要繼承MobApplication或者在onCreate()中調用MobSDK.init();

    6.在命令行中,輸入adb shell

    ps|grep 應用包名

    查詢下是否存在應用對應的進程。


    Q18:調用MobPush.setClickNotificationToLaunchMainActivity(),設置為false,點擊通知不啟動主頁,為什么設置后,沒有起作用

    A18:此方法不是對所有通道都起作用,目前只對MobPush通道、魅族通道、小米通道起作用,對于華為通道、OPPO通道、FCM通道來說,由于各個廠商不同實現的原因,是否調用此方式都不影響這三個通道,默認都是啟動主頁。


    Q19:OPPO和VIVO設備通知權限開關問題?

    A19:

    OPPO:

    在未接入OPPO PUSH前,應用的通知欄權限是默認關閉狀態; 接入OPPO PUSH后,ColorOS3.1至5.0版本的OPPO手機,用戶激活了相關應用后,通知欄權限會默認打開。特別說明,若用戶在使用舊版本應用(未集成OPPO PUSH),手動將應用的通知欄權限進行了關閉,則只有用戶手動卸載舊版本應用,再安裝新版本(集成OPPO PUSH)并激活,通知欄才會默認打開。采用覆蓋安裝的方式,通知欄權限不會默認開啟; ColorOS5.1及以后的版本的手機,通知欄權限由系統統一關閉,需用戶手動打開。

    vivo:

    在未接入vivo PUSH前,應用的通知欄權限是默認關閉狀態;接入vivo PUSH后,可以聯系vivo客戶人員,進行應用加入白名單,通知欄權限默認開啟。







    SDK打包中 — 0%
    SDK下載
    正在根據您選擇的SDK打包中,完成后自動下載
    0%

    日韩