MobPush iOS端常见问题

1,905 阅读9分钟

推送的下发逻辑是什么样的,什么叫离线推送

推送下发时候目前如果应用进程处于在线状态,走我们MobTech通道,当应用进程结束,推送下发会走厂商通道,如果厂商下发失败,或者未配置厂商等配置,且应用进程是杀死状态,那么推送会进入到离线池中,在离线时间有效期内,当用户再次打开APP,推送会再次下发。接口推送时候默认离线时间为1天,离线时间可自定义最高为30天。

通知和自定义消息区别

通知:通知是推送的常规类型,在线走tcp通道,结束进程走厂商(APNS),可以通过系统层面讲通知展示到手机的通知栏。

自定义消息:自定义消息实际为透传消息,需要应用进程存活,服务端会将推送的boday等参数下发到客户端,由客户端回调接收,自行处理。

什么叫regsiterid,别名和标签分别是什么含义

regsiterid和别名:其实都是设备的唯一标识,推送本质是将消息推送到设备上,regsiteid是MobTech给您生成的,但是regsiteid并不是不会改变,所以需要每次获取最新的regsiterid。别名相当于您自定义的设备标识。其本质是和regsiterid绑定,所以也是唯一的,且同一台设备只能设置一个,如果有AB俩台设备同时设置一个别名,那么按照设置顺序最后设置的那台设备别名生效。regsiterid和别名均适用于单点登录。

标签:标签功能,可以理解为群体推送,可以用来区分用户群体,一个标签可以给多个设备设置,每个设备也可以具备多个标签,适用于用户群体区分。也使用于多点登录逻辑。

推送成功后,后台没有数据

推送成功后,后台统计不到数据,分为俩种情况(此处默认推送您客户端可以获取到regsiterid)。第一种情况:当推送下发的设备推送权限被关掉,那么不会下发,且没有推送数据统计;第二种:推送任务成功下发,但是推送任务进入到离线池中,此时当用户再次打开APP收到推送,才能被后台统计到

推送手机收不到怎么办

iOS:目前推送分为在线推送和厂商APNS推送,由于iOS区分开发环境和生产环境所以第一时间查看下推送是否环境不匹配,第二步一定要确认应用运行状态下能否收到推送。调试推送顺序,先调试debug环境下的在线推送,在调试debug环境下杀死APP的推送。如果在线可以收到,杀死APP收不到,可通过smartpush工具校验证书。

Android:安卓和iOS本质推送原理一样,但是安卓不区分测试和生产,所以一定要确定是否在线可以收到推送,如果在线收不到推送,请检查下AppKey相关是否配置有问题,客户端获取regsiterid是否能获取成功,推送通知是否打开,注意有一些通知会被归类到不重要通知栏。如果在线可以收到,请检查厂商相关配置,以及是否推送内容,推送频次被厂商限制。

注意:如果还不能解决收到请及时联系技术支持帮您解决。

推送有测试环境和正式环境吗

iOS:推送存在测试环境和生产环境,这个是由于iOS本身推送就区分推送开发证书和生产证书,只需要在代码中设置如下:

// 设置推送环境
#ifdef DEBUG
    [MobPush setAPNsForProduction:NO];
#else
    [MobPush setAPNsForProduction:YES];
#endi

注意:iOS测试生产环境需要achiver打ADHOC类型的ipa包去测试生产哦

Android:安卓不区分推送环境,测试时候建议通过精准推送去测试,防止影响线上的设备应用。

推送支持富媒体推送吗,支持语音播放以及图片展示吗

iOS: 支持富媒体推送,需要iOS系统10以上设备,按照demo设置推送扩展,即可实现图片的播放,音频播放由于应用进程被杀死,所以需要在扩展中只能播放本地音频哦。

Android: MobPush通道支持富媒体,厂商通道暂未开通,后续会开通厂商通道支持)

静默推送和正常推送的区别

正常推送用户会收到推送内容、声音,应用处于后台或者kill可以收到推送信息,但是不会走任何回调,点击推送内容进入APP后才会进入点击回调,要想处于后台走apns回调的话,需要勾选静默推送, 静默推送是一种特殊的远程推送,没有推送内容声音,不用点击推送内容也不用进入APP就会执行回调,用户毫无感觉。

MobPush支持自定义声音吗,支持自定义跳转吗?

iOS:支持自定义声音,只需要将声音文件拖入到项目中,对应推送传入声音文件名称即可,支持自定义跳转,可在对应vc中设置标识跳转,详情参考demo。

Android :支持自定义声音设置,方法同上,支持自定义跳转,可通过scheme跳转,详情参考demo。

{"statue":4801,"error":"请求IP不匹配或者未设置"}

MobTech后台可以设置IP白名单,如果设置后只有固定ip可以进行推送,不设置的话默认所有IP均可以推送。

推送任务是否有限制

目前推送限制分为以下几种:

第一种:广播限制,推送广播类型每天限制100,每小时限制最高10次;推送regsiterid或者别名以及标签无限制,但单次下发最高下发1000个regsiterid,别名或者标签(备注别名长度自定义限制字节长度【1-100】)。

第二种: 接口频率限制,推送接口(发送+查询)的接口频率限制,默认500次/分钟;webapi全部接口的请求频率限制,默认800次/分钟。(可通过技术支持调高频率如果需求比较高)。

推送任务可根据地区进行地理范围推送

推送是可以通过设置推送地理条件进行区域推送的,目前精准到为市级。参考v3推送接口。

调用服务端推送报错怎么办 4001 4002 4005等

服务端推送报错,4001请求缺少必要参数。4002请求参数错误,4005数据校验失败(sign校验失败)这些通常都是参数设置或者加密时候的问题,可以通过postman进行尝试参数:

{"source":"webapi","appkey":"2ecbc7bc53712","pushTarget":{"target":1},"pushForward":{"scheme":"mlink://com.mob.mobpush.link","nextType":2,"schemeDataList":{"key":"Iskey","value":"IsValue"}},"pushNotify":{"plats":[2],"iosProduction":0,"content":"推送的内容","type":1}}

/*****
参考链接:[MobPush 的接口 以及一些示例 - 简书 (jianshu.com)](https://www.jianshu.com/p/0aa7308476de)
*****/

推送回调有的时候可以走,有的时候不能走,断点也没走是什么导致的

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMessage:) name:MobPushDidReceiveMessageNotification object:nil]; 需要检查这个方法是不是每次都调用到了,有可能是只调用了一次这个方法,并不是每次都调用了

后台显示推送消息是已取消状态

第一您这边rid或者别名传的不对,或者rid或者别名未入库,第二种手机设备关闭推送权限等等都会已取消,需要打开推送重新启动应用

如果推海外的话,需要加以下接口设置

国内推海外也是可以的,但是到达率应该会下降,因为海外连国内tcp服务不稳定,所以最好切换到海外服务器,需要调用这个接口[MobPush setRegionID:1],如果切换到海外服务器,推送的时候,后台推送需要选择海外版推送,如果调用api接口推送,需要用海外域名接口 abroad.api.push.mob.com/v3/push/cre… 接口去推送,传值可以参考国内接口去传值

企业账号的证书能否 使用MobPush

企业账号的证书也可以 使用MobPush

推送打开APP可以收到图片,但是关闭APP就收不到图片,是什么问题呢

需要检查下扩展是否添加

Push后台上传证书,一直报错问题

有些用户一直说他的证书是对的,但是上传还是报错,可能他之前申请的证书是可以支持开发环境也可以支持生产环境测试的,这样的上传的不行的,需要去根据我们的文档里的制作证书的方法在重新制作一个只支持开发环境的证书在上传

API请求的时候一直提示5001:服务端未知错误问题

需要检查请求的参数,参数里可能有的传值有问题

关于Push推送的一些说明

新增用户数:当日新增与MobTech服务器保持连接的用户数

活跃用户数:当日内MobPush SDK与MobTech服务器建立过长链接的用户总数量

目标数:近30天内MobPush SDK与MobTech服务器建立过长链接的用户总数量,且在装、推送权限开启(其实也叫有效目标数)

下发数:由服务器实际下发到客户端的消息总数,包含TCP下发数(不包含离线池的数据)+MobTech请求厂商,并厂商返回成功的数量

到达数:客户端SDK接收到消息的数量

点击数:Push点击数+补量点击数

  • Push点击数:点击通知栏消息的消息数量(透传不统计点击)
  • 补量点击数:通过补量任务带来的点击数

下发率:下发数/目标数

到达率:到达数/下发数

点击率:点击数/到达数

触达率:到达数/目标数

关于率的统计都精确到小数点2位

在flutter上生产环境推送APNS收不到

通过flutter build iOS来打包然后发布到蒲公英上,推送的时候选择iOS正式环境推送,前台能收到,但后台不能收到的问题,需要改用achiver打ADHOC类型的ipa包 然后发布到蒲公英后,在重新安装测试,这样前台后台才能收到。