共计 9494 个字符,预计需要花费 24 分钟才能阅读完成。
配置了默认点击跳转界面,对所有通道都无效吗
只对 MobPush、魅族、小米、华为、OPPO、VIVO 通道无效,对 FCM 通道有效。
如何获取回调参数
- 过程存活的状况下,可在咱们的回调监听中看到告诉详情,能够依据回调参数进行解决。详情请查看 API 接口 -> 推送监听接口。
- 过程被杀状况下,回调监听不可用,但点击告诉后拉起利用的启动页面,会触发启动 Activity 的 onCreate 或 onNewIntent,通过 getIntent 拿到回传的 Intent,能够拿到告诉详情。
- 注:PushSDK 提供了解析办法来获取回调参数,但厂商告诉次要是获取附加字段,不会把所有信息都解析进去。跳转首页获取参数
JSONArray jsonArray = MobPushUtils.parseMainPluginPushIntent(getIntent());
System.out.println("-------------JsonPushData 打印查看:"+jsonArray);
返回阐明
返回 | 字段 | 阐明 |
---|---|---|
“id”:”4bu9702gmq4mvl3myo” | id | 告诉工作 id,仅厂商告诉有该字段 |
{“key”:”value”} | 附加字段 | 附件字段需指定,不指定不会呈现,仅厂商告诉有该字段 |
{“from_tcp”:true} | from_tcp | 音讯是否来自 MobPushTCP 通道,true:是 |
{“msg”:”MobPushNotifyMessage{}”} | msg | 音讯体,对象为 MobPushNotifyMessage,仅 MobPushTCP 通道音讯有该字段 |
{“channel”:”mobpush”} | channel | 渠道名 |
2.2 scheme 跳转获取参数,详情请查看 API 接口 ->scheme 跳转
JSONArray jsonArray = MobPushUtils.parseSchemePluginPushIntent(getIntent());
System.out.println("-------------JsonScheme 打印查看:"+jsonArray);
返回阐明
返回 | 字段 | 阐明 |
---|---|---|
{“from_tcp”:true} | from_tcp | 音讯是否来自 MobPushTCP 通道,true:是 |
{“msg”:”MobPushNotifyMessage{}”} | msg | 音讯体,对象为 MobPushNotifyMessage,仅 MobPushTCP 通道音讯有该字段 |
{“key”:”value”} | 附加字段 | 附件字段需指定,倡议不要应用 url 做为 key |
{“mobpush_link_k”:”mlink://com.mob.mobpush.link”} | scheme | scheme 地址 |
{“mobpush_link_v”:”schemeKey=schemeValue”} | scheme 参数 | scheme 地址下携带的 scheme 参数 |
{“id”:”4brfm8nti9aj1arf28″} | id | 推送工作 id |
{“channel”:”xiaomi”} | channel | 渠道名 |
{“schemeLink”:”mlink://com.mobpush.demo2″} | scheme | scheme 地址 |
{“schemeKey”:”schemeValue”} | scheme 参数 | scheme 地址下携带的 scheme 参数(华为,VIVO,OPPO) |
{“schemeKey”:”schemeValue”,”schemeUrl”:”mlink://com.mob.mobpush.link”} | schemeUrl | scheme 地址下携带的 scheme 参数(flyme) |
3. 如不应用 PushSDK 提供的解析办法,可参考以下办法获取回调参数
private void dealPushResponse(Intent intent) {
Bundle bundle = null;
if (intent != null) {bundle = intent.getExtras();
if (bundle == null) {Log.e("PushResponse","bundle 的值为空"+bundle);
return;
}
else {Set<String> keySet = bundle.keySet();
if (keySet == null || keySet.isEmpty()) {return;}
for (String key : keySet) {
// 通过 key 获取 bundle 中的 key 对应的值。就是附加数据了
Log.e("PushResponse","bundlekey=========================== 点击信息"+key);
}
Log.e("PushResponse","bundle=========================== 点击信息"+bundle.toString());
}
}
}
OPPO 推送时按全副人群进行推送,为什么有的 OPPO 设施接管不到
因为 OPPO 推送对应全副人群这种全量推送是有个工夫限度规定的,当全量推送时当天新注册的 OPPO 设施是不失效的,第二天才失效,被全量推送计算在指标设备组中,T+ 1 规定。而对应繁多 OPPO 设施推送时,没有 T + 1 规定限度,注册胜利即立刻失效。
厂商推送关上告诉都会有回调吗
不是都有回调,OPPO 推送没有接管告诉和关上告诉的回调;FCM 推送在利用处于后盾时或者利用过程被杀掉时没有接管告诉和关上告诉的回调。
利用在前台时,MobPush 通道推送接管不到
利用在前台时,MobPush 通道推送接管不到,请依照以下步骤查看:
1. 查看手机网络是否失常
2. 查看手机告诉权限是否关上
3. 是否在告诉栏不重要的告诉里
4. 查看利用配置是否正确
调用 MobPush.setClickNotificationToLaunchMainActivity(),设置为 false,点击告诉不启动主页,为什么设置后,没有起作用
此办法不是对所有通道都起作用,目前只对 MobPush 通道、魅族通道、小米通道起作用,对于华为通道、OPPO 通道、FCM 通道来说,因为各个厂商不同实现的起因,是否调用此形式都不影响这三个通道,默认都是启动主页。
OPPO 和 VIVO 设施告诉权限开关问题
OPPO:
在未接入 OPPO PUSH 前,利用的告诉栏权限是默认敞开状态;接入 OPPO PUSH 后,ColorOS3.1 至 5.0 版本的 OPPO 手机,用户激活了相干利用后,告诉栏权限会默认关上。特地阐明,若用户在应用旧版本利用(未集成 OPPO PUSH),手动将利用的告诉栏权限进行了敞开,则只有用户手动卸载旧版本利用,再装置新版本(集成 OPPO PUSH)并激活,告诉栏才会默认关上。采纳笼罩装置的形式,告诉栏权限不会默认开启;ColorOS5.1 及当前的版本的手机,告诉栏权限由零碎对立敞开,需用户手动关上。
VIVO:
集成 VPUSH,告诉权限总开关根本默认关上,但下方类别开关默认敞开,须要用户手动关上。
小米手机接管不到推送
如果未在小米商店公布的挪动利用(APP), 小米推送团队将有权不再提供推送服务。小米利用商店对开发者利用定期平安审核的后果,调整该利用的推送权限,如开发者利用未能通过小米利用商店定期平安审核,小米有权双方解除协定,或立刻敞开该利用的推送权限,直至该利用通过小米利用商店的平安审核并在小米利用商店公布。详情可参考:link
如果小米手机接管不到推送,请先查看告诉权限是否开启,同时小米设施从 MIUI9 开始告诉栏应用不重要告诉过滤,查看告诉栏里不重要告诉里是否有对应利用的告诉。
利用告诉权限未关上状态,关上后推送接管不到
一开始利用告诉权限未关上,等进行告诉权限关上时,请杀掉过程,重新启动 APP 而后从新推送。
接管回调和点击告诉回调肯定会被调用吗
不肯定。分推送通道,不同厂商,有不同的实现形式,导致有的都回调,有的只会回调点击告诉,有的都没有回调。
MobPush 通道,接管回调和点击告诉回调都会被调用;
华为厂商通道,厂商推送只提供了点击告诉回调;
小米厂商通道,接管回调和点击告诉回调都会被调用;
魅族厂商通道,接管回调和点击告诉回调都会被调用;
OPPO 厂商通道,两种回调都没有;
FCM 通道,利用在前台时接管回调和点击告诉回调都会被调用,利用在后盾或者利用过程被杀掉未启动时两种回调都没有;
VIVO 厂商通道,厂商推送只提供了点击告诉回调。
设置标签胜利后,进行通过标签推送,接管不到推送
设置标签胜利后,个别厂商同步拉取数据须要工夫,导致接口设置标签胜利,然而推送时设施没有同步,没有指标设施,故推送接管不到。倡议设施标签胜利后,期待几分钟之后再进行推送。
一台设施能设置几个别名?不同的设施能设置雷同的别名吗?
同一个 APP,一台设施只能对应一个别名,新设置的会笼罩掉之前设置的别名。不同的设施不能同时设置雷同的别名,最初设置的设施失效,其余设施的别名都将生效。
如果利用在 Android 9 的设施上获取不到注册 ID 即(regId)
如果在其余版本的 Android 手机能够获取到注册 ID,而在 Android 9 的设施上获取不到时,请确认下 targetSdkVersion 是大于 27;大于 27 时需在 AndroidManifest.xml 文件的中 application 标签中增加 android:usesCleartextTraffic=”true”
如果推送配置了 FCM 厂商,同时须要应用 Firebase 的其余产品(ads 等产品)时,编译时报错了,怎么办
1. 独自配置 ads 和 FCM 时,他们所依赖的雷同的库版本是否统一,如果不统一,须要进行版本对立;
2. 进行版本对立:在 APPmodule 的 build.gradle 中增加
configurations.all {exclude group: 'com.google.firebase', module: 'firebase-messaging'}
// 在 app module 的 build.gradle 文件的 dependencies 里增加
compile 'com.google. firebase:firebase-messaging:17.1.0'
配置 vivo 厂商推送的 appId 和 AppKey 时,须要把“-”去掉吗
不须要
接入 vivo 厂商推送,发送推送胜利,vivo 设施未接管到推送
1. 查看配置是否正确,包名是否和申请 vivo 推送服务时的包名统一;
2. 手机告诉权限是否关上;
3. 查看音讯是否曾经送达然而折叠到了音讯盒子外面?目前的策略是利用存活时展现,不存活时折叠;
4. 查看设施联网是否有问题,如果连贯的 wifi 设置了代理,个别须要重启手机,能够切换手机网络重试;
如果配置了厂商推送的信息,然而运行打包发现 AppKey 不残缺,的确第一个数字时,怎么办
这是 gradle 版本太高导致的,请在配置有问题的中央退出一个空格。
配置了华为厂商推送,为什么有的华为设施无奈接管离线音讯
首先,排查配置的华为厂商参数是否正确;其次,查看华为设施 EMUI 版本,低于 5.0 可能不反对,如果低于 5.0,能够尝试降级设施里的‘华为挪动服务’利用,降级‘华为挪动服务’可能会反对华为厂商推送。
MobPush 的厂商推送和利用应用的其余第三方产品中的厂商推送抵触了,如何解决
首页,在 build.gradle 的 MobPush{}配置中照常配置厂商信息;而后,在 build.gradle 文件最初增加:
configurations.all {
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 哪个厂商就能够。
如果利用应用的其余第三方产品中的魅族厂商推送和 MobPush 的魅族厂商推送抵触了,推送时其中一个不起作用
因为魅族厂商推送对接管监听回调只取 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);
}
}
配置了魅族厂商推送,客户端 debug log 输入注册胜利,推送时接管不到推送或者离线推送接管不到,如何解决
1. 确认下魅族厂商推送接入的是 flyme 推送,而不是 ups 推送。
2. 确认下魅族开发者平台创立的利用是否配置了回执,如果没有配置,请配置上哦~,这个会影响推送后果,导致推送不胜利。
3. 如果下面都确认失常,仍存在问题请分割 MobTech 技术支持进行排查解决。
同一个推送监听回调被调用了屡次,为什么
如果利用有多个子过程,同时推送监听回调是在 Application 的 onCreate 办法中增加,那么存在几个子过程 Application 的 onCreate 会调用几次,监听回调也会被增加几次,所以会呈现同一个推送监听回调被调用屡次的状况。如果想要只监听回调主过程,那么再增加时需判断下以后过程,为主过程时再增加推送监听回调。
反对角标性能吗
MobPush 是反对角标性能的。需调用 MobPush.setShowBadge(true);关上角标性能,默认 false,角标性能敞开。
对于厂商通道来说,小米零碎自身就反对角标性能,不须要做任何解决;
魅族厂商不反对角标性能;
OPPO 和 VIVO 厂商目前只对自家利用和微信 QQ 凋谢角标性能;
华为厂商对 EMUI 8.0 及以上反对角标性能,如果须要对华为厂商关上角标性能,在服务端推送时在 extrasMapList 参数外面新增 androidBadgeClass 参数,其参数值是利用入口 Activity 的全门路,这样 EMUI8.0 及以上走华为厂商推送的设施就能够显示角标了。
MobPush 反对多包名吗
反对。
一台设施利用能设置多个标签吗?雷同利用不同的设施能设置雷同的标签吗
同一个 APP,一台设施能够订阅多个标签,标签请尽量应用英文防止应用中文或特殊字符,导致厂商订阅标签失败而推送不胜利;不同的设施能够同时设置同一标签。
MobPush 的 RegistrationId 会发生变化吗?如果发送变动是在什么机会下?RegistrationId 是固定长度的吗
注册 id 个别状况下不会发送变动,但也会呈现发现变动的状况,有时卸载重装或者设施复原出厂设施等状况下注册 id 会发生变化,而注册 id 的长度因为服务端外部优化后续会变动,不是固定长度的。
应用 StopPush 是否会敞开所有厂商渠道推送
除了 FCM 厂商无奈敞开(没有提供相干接口),TCP 以及其余厂商都是失常敞开的。
关上告诉权限后,还是无奈收到
MobPush 只会在初始化的时候更新记录的告诉权限状态。
如初始化的时候告诉权限是敞开的,需再次重启 APP,更新记录的告诉权限状态。如须要实时更新,可调用该办法:
// 关上轮询开关
MobPush.startNotificationMonitor();
// 敞开轮询开关
MobPush.stopNotificationMonitor();
无奈统计到厂商
请在点击告诉关上的 Activity 的 onCreate 中加上该办法
MobPush.notificationClickAck(getIntent());
华为厂商长文本款式有效
应用华为长文本款式,题目 (title) 为必填项。
华为厂商解析 intent 为空
华为传递数据给利用仅在 NC 版本在在 9.11 及以上版本失效,NC 版本查看形式(设置 - 利用 - 利用治理 - 推送服务),老旧设施存在无推送服务或版本较低问题,可尝试降级版本解决,如无奈降级,华为未给出老旧设施兼容计划。具体阐明可查看:link
集成华为厂商通道上架 Google 商店被拒,应该怎么解决?
如上架 google 商店被拒文案中有“We found your app is using a non-compliant version of Huawei Mobile Services SDK which contains code to download or install applications from unknown sources outside of Google Play”字样,起因是您以后应用的华为厂商 SDK 版本过低,华为在 6.3.0.304(2022-03-31)及以上的版本修复了该问题,您可在 Gradle 脚本中被动申明该版本,示例如下。
本地告诉应用 setTimestamp 函数在 Android12 及以上版本有效
因在 Android12 版本,在调用精准闹钟办法时,必须进行 SCHEDULE_EXACT_ALARM 权限的增加,能够在 manifest 文件中增加此权限解决。