Android端Urbain Airship MessageCenter收件箱始终为空,求配置排查
Android端Urban Airship MessageCenter消息列表为空的排查方案
盯紧MessageCenter的初始化时机
得等Airship核心SDK完全初始化好,再去初始化MessageCenter,别在Application的onCreate里直接调用。比如用onAirshipReady回调来处理:Airship.addOnReadyCallback { airship -> val messageCenter = MessageCenter.shared() // 注册监听,等 inbox 更新完再拿消息 messageCenter.inbox.addListener(object : InboxListener { override fun onInboxUpdated() { val messages = messageCenter.inbox.messages // 这里处理消息列表 } }) messageCenter.inbox.fetchMessages() }核对设备和后台的用户关联
Android这边要确认设备的channelId已经同步到Airship后台,而且你发的测试消息确实是推给这个channel对应的设备。可以用Airship.shared().channelManager.channelId拿到当前的channelId,去后台对比推送目标是不是匹配。检查网络和权限配置
- 应用必须有
INTERNET权限,虽说推送能收到,但MessageCenter拉取消息列表得单独发网络请求,没权限肯定拿不到。 - 如果应用开了网络拦截或者用了代理,得给Airship的域名开绿灯,比如
*.urbanairship.com这类域名不能被拦截。
- 应用必须有
确认后台消息的Message Center配置
在Airship后台建测试消息的时候,一定要勾选**"Show in Message Center"**选项。有些推送只是纯通知栏推送,不会进MessageCenter的列表,哪怕能弹出snackbar也没用。检查SDK版本和依赖
Android端的SDK版本最好和iOS端保持一致,避免版本差异导致API行为不一样。建议更到最新稳定版,同时确认urbanairship-message-center依赖已经正确引入:dependencies { implementation "com.urbanairship.android:urbanairship-message-center:16.x.x" }别直接在fetch后拿消息,用监听等回调
fetchMessages()是异步操作,刚调用完就去拿messages大概率是空的。得注册InboxListener,等onInboxUpdated回调触发后再去获取消息列表,这时候数据才是拉取完成的。
内容的提问来源于stack exchange,提问作者Augusto Carmo
相关产品推荐
相关产品推荐

