Android极光推送处理message遇到的坑解决

作者:似曾相识2022 时间:2022-08-08 00:49:32 

我相信现在绝大部分App几乎避免不了消息推送,其实原理还是使用了长连接,通过服务端将消息推给客户端。市面上也有不少三方库,例如极光、友盟、个推、阿里等等。今天我就分享一下我在使用极光推送时遇到的坑,希望对大家有所帮助。

极光推送的接入和使用这里就不展开说明,咱们直接进入主题。因为项目使用的是通知栏方式,就是手机会先收到一个通知栏,用户点击通知栏跳转对应页面。

Android极光推送处理message遇到的坑解决

在点击这个通知栏时会触发其中onNotifyMessageOpened方法,后端会把我们所需要的内容放在message中。其实也就是个json字符串,我们拿到后需要通过对它解析拿到我们所需数据。

override fun onNotifyMessageOpened(
   context: Context?,
   message: NotificationMessage
) {
   val title = message.notificationTitle//通知栏标题
   val content = message.notificationContent//通知栏内容
   val json = message.notificationExtras//推送信息
}

到这里都还一帆风顺,接下来就出现问题了,明明日志获取到了对应信息,但解析后使用却是空:

val fromJson = gson.fromJson(json, Bean::class.java)

我打印了一下json信息:

{"data":"{\"type\":1,\"name\":\"张三\"}"}

Android极光推送处理message遇到的坑解决

很明显,data内部只能识别出一个字符串。所以我们无法拿到内部的type和name属性。经过了解后才知道,后端设置notificationExtras时只能设置为Sting类型,然而notificationExtras已经是实体内的一个属性,所以我们拿到的时候其实json已经被转义了。那么怎么解决呢?其实把data的值再一次通过Gson解析就能拿到数据了。我们这里采取Map来解析:

其实如果使用Gson解析就不会再出现坑,因为使用Map后面还有坑,所以这里接着使用Map来解析。

val map = Gson().fromJson<HashMap<String, Any>>(
   fromJson.data,
   HashMap::class.java
)

通过上面的json信息其实不难发现,data内部只有两个属性,一个int类型的type,一个Sting类型的name。然而,这里的坑又出现了......

Android极光推送处理message遇到的坑解决

眼尖的同学估计已经发现问题了,一个int类型的数据竟然给我转换成Double类型的数据了,不得不说这很不严谨。难道是自己哪里没操作对吗?最后通过查阅资料发现,这是Gson的坑,不仅仅是int,连Long也会被转换为Double,这一点让人很难接受。如何解决?

  • 自定义GsonTypeAdapter,具体实现可以查阅资料

  • 抛弃Gson,拥抱阿里,使用FastJson

到此,我们便拿到了期望的数据。这里还要提一点,关于通知消息跳转Acticity栈顶的配置。如果当前正在目标页面,那么我们一定不希望重新创建新的页面,而是希望在当前页面刷新数据即可。所以不要忘记给目标页面配置栈顶模式,重写OnNewIntent方法。

另外,在广播中跳转Activity时,一定不要忘记给Intent设置flags。

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK

来源:https://juejin.cn/post/7204841743275540517

标签:Android,message,极光推送,坑
0
投稿

猜你喜欢

  • Java递归实现迷宫游戏

    2023-08-26 07:33:16
  • Java jar打包工具使用方法步骤解析

    2023-07-01 12:26:47
  • TOMCAT内存溢出及大小调整的实现方法

    2023-02-24 06:55:33
  • Spring Boot和Kotlin的无缝整合与完美交融

    2022-07-08 04:54:09
  • Java httpClient介绍以及使用示例

    2023-03-15 23:51:15
  • java io文件操作从文件读取数据的六种方法

    2023-05-17 02:54:40
  • Android 悬浮窗权限各机型各系统适配大全(总结)

    2022-04-27 10:09:53
  • C#操作 JSON方法汇总

    2023-01-23 06:49:59
  • Android 仿微信发动态九宫格拖拽、删除功能

    2022-08-28 12:51:03
  • AsyncTask官方文档教程整理

    2023-07-31 20:25:08
  • JFinal实现伪静态的方法

    2023-07-17 12:11:37
  • Android开发之利用jsoup解析HTML页面的方法

    2023-03-31 19:03:03
  • Android AndBase框架使用封装好的函数完成Http请求(三)

    2021-09-15 09:49:56
  • Android SharedPreferences的使用分析

    2023-11-09 18:47:08
  • Java9的一些新特性介绍

    2022-03-29 04:13:58
  • Android仿微信实现首字母导航条

    2022-07-16 11:14:29
  • idea离线使用jrebel的超详细教程

    2022-05-18 10:01:27
  • C#实现QQ截图功能及相关问题

    2022-10-30 08:47:01
  • Mybatis如何使用ognl表达式实现动态sql

    2021-06-22 03:34:49
  • 用C语言实现一个扫雷小游戏

    2022-02-24 01:35:56
  • asp之家 软件编程 m.aspxhome.com