布置作业后,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)
网友评论