如何最好地使用 Go 使用 FCM / GCM 发送复杂数据

How best to send complex data with FCM / GCM using Go

FCM 和 GCM 文档都将 data 有效负载的结构作为 map[string]string(尽管 google's GCM package 在 map[string]interface{ })

但是,在很多情况下,简单的平面 key:value 结构并不能满足应用程序的需要。一些例子是当需要一片值时,或者当需要发送另一个重要的结构时。

将更复杂的数据结构作为映射[string]字符串发送的最简洁的方法是什么?


结论:我已将 fl0cke 的答案标记为正确,因为它提供了使用 Go 使用 FCM / GCM 发送复杂数据的解决方案。但是,从 FCM 文档中可以清楚地看出,其目的是让数据成为 key:value 字符串对向前移动,因此为了确保将来不会出现任何问题,我将坚持使用简单的 key:value 字符串对。

根据 this 的回答,可以使用 FCM/GCM 发送嵌套数据。 为此,您可以编写自己的 FCM 客户端或分叉 google 的实现,并将 Data 的类型定义从

更改为
type Data map[string]interface{}

type Data interface{}

并插入任何 JSON 可序列化的类型(例如嵌套结构)。


也可以通过 JSON 字符串发送数据而不改变 Data 的类型定义:

// first marshal your complex data structure
complexData := someComplexStruct{...}
b, _ := json.Marshal(complexData)

// then assign the returned json string to one key of your choice
data := map[string]interface{}{"key":string(b)}

在客户端解析之前,您可能必须取消对 json 字符串的引用。