美文网首页
极光推送(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