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%