美文网首页
极光推送(JPush)收不到自定义消息的调试记录

极光推送(JPush)收不到自定义消息的调试记录

作者: 南窗云 | 来源:发表于2018-11-06 17:13 被阅读0次

布置作业后,App要及时收到,并展示未读数量,肯定是要用推送了。

前言

App里是集成好的,与后端调试时遇到问题,特此记录。

// app中的自定义类
class JPushReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
        when (intent?.action) {
            JPushInterface.ACTION_MESSAGE_RECEIVED -> {//收到了自定义消息
                val title = intent.extras.getString(JPushInterface.EXTRA_TITLE)
                val message = intent.extras.getString(JPushInterface.EXTRA_MESSAGE)
                val extra = intent.extras.getString(JPushInterface.EXTRA_EXTRA)
                logError("自定义消息  title: $title  message: $message  extra: $extra")

                when(title){
                    fromHomeWork -> {
                        setLocalPushJobs(extra)
                    }
                    else -> {
                        val feedMessage = Gson().fromJson(extra, FeedMessage::class.java)
                        if (feedMessage.type == "delete") {
                            RiseDatabase.getInstance().feedDao().deleteMessage(feedMessage.contentId)
                        } else {
                            RiseDatabase.getInstance().feedDao().insertFeedMessage(feedMessage)
                        }
                    }
                }

            }
            JPushInterface.ACTION_NOTIFICATION_RECEIVED -> {//用户通知
                val title = intent.extras.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE)
                val content = intent.extras.getString(JPushInterface.EXTRA_ALERT)
                logError("通知消息  title: $title  content: $content")
            }
            JPushInterface.ACTION_NOTIFICATION_OPENED -> {//用户点击
//                logError("用户点击通知") //不处理
            }
        }
    }

   companion object {
        private const val fromHomeWork = "[布置作业提醒]"
    }

问题

后端发送推送消息总是收不到,报错 1003 ,查极光推送文档

状态码

解决

通过日志,很快定位到问题,后端传参格式不对(数组)

{"msg_id":"38280598893709150","error":{"code":1003,"message":"android extras must be json object"}}

改为 json 对象后就收到消息了。(这种情况只限于通知,其他类型可以使数组)

但是收到的是通知,而我需要的是自定义消息,然后进行自定义处理。

后端更换为message类型后,一直收不到自定义推送的消息
最后发现是因为 message 传空导致的,message必须传内容,否则收不到自定义消息。

val message = intent.extras.getString(JPushInterface.EXTRA_MESSAGE)

message 不为空
message 不为空
message 不为空

关于iOS

Android 是调通了的,但是iOS一直收不到 !
最后发现:
后端发的测试数据,extras 里面 Array 的 key 是 0,
这种情况,iOS那边解析不符合数据字典的要求,所以没有接到extras的信息。

兼容 iOS & Android

iOS 接收 JsonArray 时,必须设置key,而Android不用。
为了兼容,所以Android需要多取一步数据。

    //    val array = JSONArray(content)   // 最初的样子

    /**
     *  为了兼容 iOS ,数组必须加key,所以这边多取了一次 extras
     */
    val extra = JSONObject(content)
    val arrayStr = extra.getString("extras")
    val array = JSONArray(arrayStr)

相关文章

网友评论

      本文标题:极光推送(JPush)收不到自定义消息的调试记录

      本文链接:https://www.haomeiwen.com/subject/iwiuxqtx.html