MobPush 开发过程常见问题
Android 端 Scheme 跳转首页,APP 在前台跳转正常,后台失败
Android 端配置了默认点击跳转界面,对所有通道都有效吗
不是,对 MobPush、魅族、小米、华为、OPPO、VIVO 通道有效;对 FCM 通道无效。
Android 端如何获取回调参数
进程存活的情况下,可在我们的回调监听中看到通知详情,可以根据回调参数进行处理。 详情请查看 API 接口->推送监听接口。
进程被杀情况下,回调监听不可用,但点击通知后拉起应用的启动页面,会触发启动 Activity 的 onCreate 或 onNewIntent,通过 getIntent 拿到回传的 Intent,可以拿到通知详情。
注:PushSDK 提供了解析方法来获取回调参数,但厂商通知主要是获取附加字段,不会把所有信息都解析出来。 跳转首页获取参数
返回说明
2.2 scheme 跳转获取参数,详情请查看 API 接口->scheme 跳转
3.如不使用 PushSDK 提供的解析方法,可参考以下方法获取回调参数
Android 端 OPPO 推送时按全部人群进行推送,为什么有的 OPPO 设备接收不到
因为 OPPO 推送对应全部人群这种全量推送是有个时间限制规则的,当全量推送时当天新注册的 OPPO 设备是不生效的,第二天才生效,被全量推送计算在目标设备组中,T+1 规则。 而对应单一 OPPO 设备推送时,没有 T+1 规则限制,注册成功即立即生效。
Android 端厂商推送打开通知都会有回调吗
不是都有回调,OPPO 推送没有接收通知和打开通知的回调;FCM 推送在应用处于后台时或者应用进程被杀掉时没有接收通知和打开通知的回调。
Android 端应用在前台时,MobPush 通道推送接收不到
应用在前台时,MobPush 通道推送接收不到,请按照以下步骤检查:
检查手机网络是否正常
检查手机通知权限是否打开
是否在通知栏不重要的通知里
检查应用配置是否正确
Android 端调用 MobPush.setClickNotificationToLaunchMainActivity(),设置为 false,点击通知不启动主页,为什么设置后,没有起作用**
此方法不是对所有通道都起作用,目前只对 MobPush 通道、魅族通道、小米通道起作用,对于华为通道、OPPO 通道、FCM 通道来说,由于各个厂商不同实现的原因,是否调用此方式都不影响这三个通道,默认都是启动主页。
Android 端 OPPO 和 VIVO 设备通知权限开关问题
OPPO:
在未接入 OPPO PUSH 前,应用的通知栏权限是默认关闭状态; 接入 OPPO PUSH 后,ColorOS3.1 至 5.0 版本的 OPPO 手机,用户激活了相关应用后,通知栏权限会默认打开。特别说明,若用户在使用旧版本应用(未集成 OPPO PUSH),手动将应用的通知栏权限进行了关闭,则只有用户手动卸载旧版本应用,再安装新版本(集成 OPPO PUSH)并激活,通知栏才会默认打开。采用覆盖安装的方式,通知栏权限不会默认开启; ColorOS5.1 及以后的版本的手机,通知栏权限由系统统一关闭,需用户手动打开。
VIVO: 集成 VPUSH,通知权限总开关基本默认打开,但下方类别开关默认关闭,需要用户手动打开。
Android 端小米手机接收不到推送
如果小米手机接收不到推送,请先检查通知权限是否开启,同时小米设备从 MIUI9 开始通知栏使用不重要通知过滤,检查通知栏里不重要通知里是否有对应应用的通知。
Android 端应用通知权限未打开状态,打开后推送接收不到
一开始应用通知权限未打开,等进行通知权限打开时,请杀掉进程,重新启动 APP 然后重新推送。
Android 端接收回调和点击通知回调一定会被调用吗
不一定。分推送通道,不同厂商,有不同的实现方式,导致有的都回调,有的只会回调点击通知,有的都没有回调。
MobPush 通道,接收回调和点击通知回调都会被调用;
华为厂商通道,厂商推送只提供了点击通知回调;
小米厂商通道,接收回调和点击通知回调都会被调用;
魅族厂商通道,接收回调和点击通知回调都会被调用;
OPPO 厂商通道,两种回调都没有;
FCM 通道,应用在前台时接收回调和点击通知回调都会被调用,应用在后台或者应用进程被杀掉未启动时两种回调都没有;
VIVO 厂商通道,厂商推送只提供了点击通知回调。
Android 端设置标签成功后,进行通过标签推送,接收不到推送
设置标签成功后,个别厂商同步拉取数据需要时间,导致接口设置标签成功,但是推送时设备没有同步,没有目标设备,故推送接收不到。建议设备标签成功后,等待几分钟之后再进行推送。
Android 端一台设备能设置几个别名?不同的设备能设置相同的别名吗?
同一个 APP,一台设备只能对应一个别名,新设置的会覆盖掉之前设置的别名。不同的设备不能同时设置相同的别名,最后设置的设备生效,其他设备的别名都将失效。
Android 端如果应用在 Android 9 的设备上获取不到注册 ID 即(regId)
如果在其他版本的 Android 手机可以获取到注册 ID,而在 Android 9 的设备上获取不到时,请确认下 targetSdkVersion 是大于 27; 大于 27 时需在 AndroidManifest.xml 文件的中 application 标签中添加 android:usesCleartextTraffic="true"
Android 端如果推送配置了 FCM 厂商,同时需要使用 Firebase 的其他产品(ads 等产品)时,编译时报错了,怎么办
单独配置 ads 和 FCM 时,他们所依赖的相同的库版本是否一致,如果不一致,需要进行版本统一;
进行版本统一:在 APPmodule 的 build.gradle 中添加
Android 端配置 vivo 厂商推送的 appId 和 AppKey 时,需要把“-”去掉吗
不需要
Android 端接入 vivo 厂商推送,发送推送成功,vivo 设备未接收到推送
检查配置是否正确,包名是否和申请 vivo 推送服务时的包名一致;
手机通知权限是否打开;
检查消息是否已经送达但是折叠到了消息盒子里面?目前的策略是应用存活时展示,不存活时折叠;
检查设备联网是否有问题,如果连接的 wifi 设置了代理,一般需要重启手机,可以切换手机网络重试;
Android 端如果配置了厂商推送的信息,但是运行打包发现 AppKey 不完整,确实第一个数字时,怎么办
这是 gradle 版本太高导致的,请在配置有问题的地方加入一个空格。
Android 端配置了华为厂商推送,为什么有的华为设备无法接收离线消息
首先,排查配置的华为厂商参数是否正确; 其次,检查华为设备 EMUI 版本,低于 5.0 可能不支持,如果低于 5.0,可以尝试升级设备里的‘华为移动服务’应用,升级‘华为移动服务’可能会支持华为厂商推送。
Android 端 MobPush 的厂商推送和应用使用的其他第三方产品中的厂商推送冲突了,如何解决
首页,在 build.gradle 的 MobPush{}配置中照常配置厂商信息; 然后,在 build.gradle 文件最后添加:
哪个厂商冲突,exclude 哪个厂商就可以。
Android 端如果应用使用的其他第三方产品中的魅族厂商推送和 MobPush 的魅族厂商推送冲突了,推送时其中一个不起作用
由于魅族厂商推送对接收监听回调只取 AndroidManifest.xml 中配置的第一个 Reciever,所以谁在前面配置哪个产品就生效,后面配置多少个魅族厂商推送回调监听都无效。 解决方法: 自定义一个 Receiver,继承自 MzPushMessageReceiver,重新里面所有的方法,然后这个自定义的 Receiver 里调用 MobPush 的魅族回调和第三方产品的魅族回调;然后再 AndroidManifest.xml 文件中进行配置:
在自定义的 Receiver 里实现示例:
Android 端配置了魅族厂商推送,客户端 debug log 输出注册成功,推送时接收不到推送或者离线推送接收不到,如何解决
确认下魅族厂商推送接入的是 flyme 推送,而不是 ups 推送。
确认下魅族开发者平台创建的应用是否配置了回执,如果没有配置,请配置上哦~,这个会影响推送结果,导致推送不成功。
如果上面都确认正常,仍存在问题请联系 MobTech 技术支持进行排查解决。
Android 端同一个推送监听回调被调用了多次,为什么
如果应用有多个子进程,同时推送监听回调是在 Application 的 onCreate 方法中添加,那么存在几个子进程 Application 的 onCreate 会调用几次,监听回调也会被添加几次,所以会出现同一个推送监听回调被调用多次的情况。 如果想要只监听回调主进程,那么再添加时需判断下当前进程,为主进程时再添加推送监听回调。
Android 端支持角标功能吗
MobPush 是支持角标功能的。需调用 MobPush.setShowBadge(true);打开角标功能,默认 false,角标功能关闭。
对于厂商通道来说,小米系统本身就支持角标功能,不需要做任何处理;
魅族厂商不支持角标功能;
OPPO 和 VIVO 厂商目前只对自家应用和微信 QQ 开放角标功能;
华为厂商对 EMUI 8.0 及以上支持角标功能,如果需要对华为厂商打开角标功能,在服务端推送时在 extrasMapList 参数里面新增 androidBadgeClass 参数,其参数值是应用入口 Activity 的全路径,这样 EMUI8.0 及以上走华为厂商推送的设备就可以显示角标了。
Android 端 MobPush 支持多包名吗
支持。
Android 端一台设备应用能设置多个标签吗?相同应用不同的设备能设置相同的标签吗
同一个 APP,一台设备可以订阅多个标签,标签请尽量使用英文避免使用中文或特殊字符,导致厂商订阅标签失败而推送不成功;不同的设备可以同时设置同一标签。
Android 端 MobPush 的 RegistrationId 会发生变化吗?如果发送变化是在什么时机下?RegistrationId 是固定长度的吗**
注册 id 一般情况下不会发送变化,但也会出现发现变化的情况,有时卸载重装或者设备恢复出厂设备等情况下注册 id 会发生变化,而注册 id 的长度由于服务端内部优化后续会变化,不是固定长度的。
Android 端使用 StopPush 是否会关闭所有厂商渠道推送
除了 FCM 厂商无法关闭(没有提供相关接口),TCP 以及其他厂商都是正常关闭的。
Android 端打开通知权限后,还是无法收到
MobPush 只会在初始化的时候更新记录的通知权限状态。
如初始化的时候通知权限是关闭的,需再次重启 APP,更新记录的通知权限状态。 如需要实时更新,可调用该方法:
Android 端无法统计到厂商点击
请在点击通知打开的 Activity 的 onCreate 中加上该方法
Android 端华为厂商长文本样式无效
使用华为长文本样式,标题(title)为必填项。
Android 端华为厂商解析 intent 为空
华为传递数据给应用仅在 NC 版本在在 9.11 及以上版本生效,NC 版本查看方式(设置-应用-应用管理-推送服务),老旧设备存在无推送服务或版本较低问题,可尝试升级版本解决,如无法升级,华为未给出老旧设备兼容方案。详细说明可查看:自定义点击消息动作
iOS 端推送的下发逻辑是什么样的,什么叫离线推送
推送下发时候目前如果应用进程处于在线状态,走我们 MobTech 通道,当应用进程结束,推送下发会走厂商通道,如果厂商下发失败,或者未配置厂商等配置,且应用进程是杀死状态,那么推送会进入到离线池中,在离线时间有效期内,当用户再次打开 APP,推送会再次下发。接口推送时候默认离线时间为 1 天,离线时间可自定义最高为 30 天。
iOS 端通知和自定义消息区别
通知:通知是推送的常规类型,在线走 tcp 通道,结束进程走厂商(APNS),可以通过系统层面讲通知展示到手机的通知栏。
自定义消息:自定义消息实际为透传消息,需要应用进程存活,服务端会将推送的 boday 等参数下发到客户端,由客户端回调接收,自行处理。
iOS 端什么叫 regsiterid,别名和标签分别是什么含义
regsiterid 和别名:其实都是设备的唯一标识,推送本质是将消息推送到设备上,regsiteid 是 MobTech 给您生成的,但是 regsiteid 并不是不会改变,所以需要每次获取最新的 regsiterid。别名相当于您自定义的设备标识。其本质是和 regsiterid 绑定,所以也是唯一的,且同一台设备只能设置一个,如果有 AB 俩台设备同时设置一个别名,那么按照设置顺序最后设置的那台设备别名生效。regsiterid 和别名均适用于单点登录。
标签:标签功能,可以理解为群体推送,可以用来区分用户群体,一个标签可以给多个设备设置,每个设备也可以具备多个标签,适用于用户群体区分。也使用于多点登录逻辑。
iOS 端推送成功后,后台没有数据
推送成功后,后台统计不到数据,分为俩种情况(此处默认推送您客户端可以获取到 regsiterid)。第一种情况:当推送下发的设备推送权限被关掉,那么不会下发,且没有推送数据统计;第二种:推送任务成功下发,但是推送任务进入到离线池中,此时当用户再次打开 APP 收到推送,才能被后台统计到
iOS 端推送手机收不到怎么办
iOS:目前推送分为在线推送和厂商 APNS 推送,由于 iOS 区分开发环境和生产环境所以第一时间查看下推送是否环境不匹配,第二步一定要确认应用运行状态下能否收到推送。调试推送顺序,先调试 debug 环境下的在线推送,在调试 debug 环境下杀死 APP 的推送。如果在线可以收到,杀死 APP 收不到,可通过 smartpush 工具校验证书。
Android:安卓和 iOS 本质推送原理一样,但是安卓不区分测试和生产,所以一定要确定是否在线可以收到推送,如果在线收不到推送,请检查下 AppKey 相关是否配置有问题,客户端获取 regsiterid 是否能获取成功,推送通知是否打开,注意有一些通知会被归类到不重要通知栏。如果在线可以收到,请检查厂商相关配置,以及是否推送内容,推送频次被厂商限制。
注意:如果还不能解决收到请及时联系技术支持帮您解决。
iOS 端推送有测试环境和正式环境吗
iOS:推送存在测试环境和生产环境,这个是由于 iOS 本身推送就区分推送开发证书和生产证书,只需要在代码中设置如下:
注意:iOS 测试生产环境需要 achiver 打 ADHOC 类型的 ipa 包去测试生产哦
Android:安卓不区分推送环境,测试时候建议通过精准推送去测试,防止影响线上的设备应用。
iOS 端推送支持富媒体推送吗,支持语音播放以及图片展示吗
iOS: 支持富媒体推送,需要 iOS 系统 10 以上设备,按照 demo 设置推送扩展,即可实现图片的播放,音频播放由于应用进程被杀死,所以需要在扩展中只能播放本地音频哦。
Android: MobPush 通道支持富媒体,厂商通道暂未开通,后续会开通厂商通道支持)
iOS 端静默推送和正常推送的区别
正常推送用户会收到推送内容、声音,应用处于后台或者 kill 可以收到推送信息,但是不会走任何回调,点击推送内容进入 APP 后才会进入点击回调,要想处于后台走 apns 回调的话,需要勾选静默推送, 静默推送是一种特殊的远程推送,没有推送内容声音,不用点击推送内容也不用进入 APP 就会执行回调,用户毫无感觉。
iOS 端 MobPush 支持自定义声音吗,支持自定义跳转吗?
iOS:支持自定义声音,只需要将声音文件拖入到项目中,对应推送传入声音文件名称即可,支持自定义跳转,可在对应 vc 中设置标识跳转,详情参考 demo。
Android :支持自定义声音设置,方法同上,支持自定义跳转,可通过 scheme 跳转,详情参考 demo。
iOS 端 {"statue":4801,"error":"请求 IP 不匹配或者未设置"}
MobTech 后台可以设置 IP 白名单,如果设置后只有固定 ip 可以进行推送,不设置的话默认所有 IP 均可以推送。
iOS 端推送任务是否有限制
目前推送限制分为以下几种:
第一种:广播限制,推送广播类型每天限制 100,每小时限制最高 10 次;推送 regsiterid 或者别名以及标签无限制,但单次下发最高下发 1000 个 regsiterid,别名或者标签(备注别名长度自定义限制字节长度【1-100】)。
第二种: 接口频率限制,推送接口(发送+查询)的接口频率限制,默认 500 次/分钟;webapi 全部接口的请求频率限制,默认 800 次/分钟。(可通过技术支持调高频率如果需求比较高)。
iOS 端推送任务可根据地区进行地理范围推送
推送是可以通过设置推送地理条件进行区域推送的,目前精准到为市级。参考 v3 推送接口。
iOS 端调用服务端推送报错怎么办 4001 4002 4005 等
服务端推送报错,4001 请求缺少必要参数。4002 请求参数错误,4005 数据校验失败(sign 校验失败)这些通常都是参数设置或者加密时候的问题,可以通过 postman 进行尝试参数:
iOS 端推送回调有的时候可以走,有的时候不能走,断点也没走是什么导致的
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMessage:) name:MobPushDidReceiveMessageNotification object:nil]; 需要检查这个方法是不是每次都调用到了,有可能是只调用了一次这个方法,并不是每次都调用了
iOS 端后台显示推送消息是已取消状态
第一您这边 rid 或者别名传的不对,或者 rid 或者别名未入库,第二种手机设备关闭推送权限等等都会已取消,需要打开推送重新启动应用
iOS 端如果推海外的话,需要加以下接口设置
国内推海外也是可以的,但是到达率应该会下降,因为海外连国内 tcp 服务不稳定,所以最好切换到海外服务器,需要调用这个接口[MobPush setRegionID:1],如果切换到海外服务器,推送的时候,后台推送需要选择海外版推送,如果调用 api 接口推送,需要用海外域名接口 http://abroad.api.push.mob.com/v3/push/createPush 接口去推送,传值可以参考国内接口去传值
iOS 端企业账号的证书能否 使用 MobPush
企业账号的证书也可以 使用 MobPush
iOS 端推送打开 APP 可以收到图片,但是关闭 APP 就收不到图片,是什么问题呢
需要检查下扩展是否添加
iOS 端 Push 后台上传证书,一直报错问题
有些用户一直说他的证书是对的,但是上传还是报错,可能他之前申请的证书是可以支持开发环境也可以支持生产环境测试的,这样的上传的不行的,需要去根据我们的文档里的制作证书的方法在重新制作一个只支持开发环境的证书在上传
iOS 端 API 请求的时候一直提示 5001:服务端未知错误问题
需要检查请求的参数,参数里可能有的传值有问题
iOS 端关于 Push 推送的一些说明
新增用户数:当日新增与 MobTech 服务器保持连接的用户数
活跃用户数:当日内 MobPush SDK 与 MobTech 服务器建立过长链接的用户总数量
目标数:近 30 天内 MobPush SDK 与 MobTech 服务器建立过长链接的用户总数量,且在装、推送权限开启(其实也叫有效目标数)
下发数:由服务器实际下发到客户端的消息总数,包含 TCP 下发数(不包含离线池的数据)+MobTech 请求厂商,并厂商返回成功的数量
到达数:客户端 SDK 接收到消息的数量
点击数:Push 点击数+补量点击数
Push 点击数:点击通知栏消息的消息数量(透传不统计点击)
补量点击数:通过补量任务带来的点击数
下发率:下发数/目标数
到达率:到达数/下发数
点击率:点击数/到达数
触达率:到达数/目标数
关于率的统计都精确到小数点 2 位
iOS 端在 flutter 上生产环境推送 APNS 收不到
通过 flutter build iOS 来打包然后发布到蒲公英上,推送的时候选择 iOS 正式环境推送,前台能收到,但后台不能收到的问题,需要改用 achiver 打 ADHOC 类型的 ipa 包 然后发布到蒲公英后,在重新安装测试,这样前台后台才能收到。
评论