配置了默认点击跳转界面,对所有通道都无效吗
只对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文件中增加此权限解决。