Android常见问题

Android常见问题

1. 发送消息后接收不到?

  • 查看相关的配置信息是否有问题。
  • 如果发送透传消息的话,客户端是没有任何提示的,需要客户端配置intentservice来接收透传消息,接收到透传消息后自定义消息的展示方式。
  • 如果是华为手机,请把应用加入“允许后台运行的程序”。因手机关屏休眠后会杀掉后台不受保护的进程。
  • 如下图1,4.0以上的系统,如果在设置里去掉了显示通知的选项,是展示不出来通知的。
  • 如下图2,小米手机的设置有所不同,在 设置—通知栏设置---自定义通知 里,可以针对单个应用进行通知栏展示设置,“显示通知栏”关闭后,则不会在通知栏里展示通知消息。
  • 小米手机在后台接收不到消息,则需要配置一下:在 安全中心 - 授权管理 - 自启动管理,把应用的自启动打开就可以了。

img_20 img_21

2. ClientID在哪些情况下会改变?

  • 用户超过三个月未登录,之后再登录会重新生成一个CID。
  • 双清:即卸载应用,清除sd卡下libs文件夹,然后重新安装。注意:用户卸载后重新安装(libs没有清除)如果在没有获取到sd卡读写权限之前初始化个推,同样cid也会发生变化。(只适用于Android客户端)。
  • Android:应用的包名修改;iOS:bundleID的修改(越狱手机卸载安装也有可能会变)。

3. Android客户端为什么ClientID和APPID绑定错误,导致消息接收不到?

  • 因为第一次配置APPID等信息打包安装到手机上获取到ClientID后,ClientID与APPID就绑定完成,此绑定关系不会再改变。之后再修改APPID等信息,ClientID不会再重新绑定修改后的APPID。
  • 解决办法:双清:即把SD卡下libs文件夹删除掉,再把应用卸载了重新安装,之后就可以获取到新的ClientID,这个ClientID绑定的APPID就是修改后的APPID。

4. Tag何时才可以设置?

  • 客户端获到clientid之后,再设置tag。先看下客户端接入文档,获取透传消息这块中有包含 GET_CLIENTID的action,当收到这个clientid广播之后你才可以settag()。至于放在哪里自己定。

5. ClientID为何会绑定到其他APPID上?

  • Android手机上,Clientid只会绑定一次APPID,一旦绑定成功则不会改变。
  • 例如:一开始配置的应用A的APPID等参数进行打包安装在手机上,生成的ClientID绑定的APPID就是A应用的。 这时去修改成应用B的APPID等参数进行再次打包安装在手机上,包名不变的情况下,ClientID还是用的应用A的,绑定的APPID还是应用A的。 如果要改变,则需要把应用卸载,并且删除SD卡下的libs文件夹,然后重新打包安装在手机上,这时会生成一个新的ClientID,新ClientID绑定的APPID就是应用B的。

6. Android5.0个推自定义权限冲突?

  • 目前有许多客户在Android 5.0系统上接入个推SDK时,会发现如果其他集成个推SDK的应用已经安装在手机,此应用就不能再安装上去,会出现权限冲突。
    报错信息如下:
    STALL_FAILED_DUPLICATE_PERMISSION perm=getui.permission.GetuiService pkg=com.XXX.XXXXX]
    
    对此个推对权限配置做了如下修改
    <permission
        android:name="getui.permission.GetuiService.你的应用包名"
        android:protectionLevel="normal" >
    

7. 第三方系统管理软件限制收不到推送的消息

需要用户手动操作第三方 ROM 的管理软件

EMUI OS(华为)

  • 自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程不会开启,只能手动开启应用

    img_3

  • 后台应用保护:需要手动把应用加到此列表,否则设备进入睡眠后会自动杀掉应用进程,只有手动开启应用才能恢复运行

    img_4

  • 通知管理:应用状态有三种:提示、允许、禁止。禁止应用则通知栏不会有任何提醒

Flyme OS(魅族)

  • 自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启

    img_4

  • 通知栏推送:关闭应用通知则收到消息不会有任何展示

  • 省电管理: 安全中心里设置省电模式,在【待机耗电管理】中允许应用待机时,保持允许,否则手机休眠或者应用闲置一段时间,无法正常接收消息。

    img_4

Funtouch OS(VIVO)

  • 自启动管理:需要将应用加入“i管家”中的【自启动管理】列表,否则重启手机后进程不会自启。但强制手动杀进程,即使加了这个列表中,后续进程也无法自启动。

Color OS(OPPO)

  • 冻结应用管理:需要将应用加入纯净后台,否则锁屏状态下无法及时收到消息
  • 自启动管理:将应用加入【自启动管理】列表的同时,还需要到设置-应用程序-正在运行里锁定应用进程,否则杀进程或者开机后进程不会开启,只能手动开启应用

MIUI OS (小米)

  • 自启动管理:需要把应用加到【自启动管理】列表,否则杀进程或重新开机后进程无法开启

    img_3

  • 通知提示设置:应用默认都是显示通知栏通知,如果关闭,则收到通知也不会提示

  • 网络助手:可以手动禁止已安装的第三方程序访问2G/3G和WIFI的网络和设置以后新安装程序是否允许访问2G/3G和WIFI的网络
  • MIUI 7 神隐模式: 允许用户设置后台联网应用,开启后应用即可在后台保持联网,否则应用进入后台时,应用无法正常接收消息。【设置】->【电量和性能】->【神隐模式】

    img_4

8. 其他常见Android问题

(1)安卓客户端收到通知,点击通知跳转到应用内对应页面的实现

  • 服务端调接口推送的情况下:推送notificationtemplate transmissiontype设置成2 填写透传内容;客户端获取透传消息(intentservice中的onReceiveMessageData)处写跳转代码。
  • 个推开发平台上推送启动应用通知的情况下:高级设置里面填写透传内容,强制启动设置成否;客户端获取透传消息(intentservice中的onReceiveMessageData)处写跳转代码。

(2)客户端接收到透传消息后为何立即打开了应用

  • 代码推送:查看一下服务端代码TransmissionType设置的参数,参数为1时是强制启动应用,2是等待客户端处理;讲该参数设置修改为2,将不立即打开应用。
  • 平台推送:查看一下高级设置里面,强制启动应用设置的是否为开启,设置为关闭后,将不立即打开应用。

(3)推送了一条透传信息为什么获取不到透传

  • 第一:服务端用的是否是通知加透传的消息模板,这种方式不能直接获取到透传消息,需要点击通知才能获取透传。
  • 第二:intentservice在manifest中是否有配置。
  • 第三:在intentservice中的onreceivemessagedata中获取。

(4)获取不到用户cid

  • 按照官网集成步骤重新检查一遍,(appid等参数是否出错、maven地址是否可以访问、pushservice是否初始化、intentservice是否注册、manifest中是否配置了这两个service)
  • 快速集成和标准集成有没有混用,如果选择了maven配置就不需要再手动导入jar包和so文件。
  • 部分原因是因网络不稳定导致,可以强制停止一下应用再开启或切换一下网络,若是wifi环境,检查是否有端口限制 5227 5225 5226
  • sdk是否是最新版本,如果是老的版本,部分机型可能会在android7.0手机上获取cid有问题,建议更新到最新版本的sdk;
  • 在Android7.0的设备上,需要在初始化之前获取SD卡读取权限,具体可参考sdk包中demo工程的GetuiSdkDemoActivity。