如何最好地使用 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 字符串的引用。
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 字符串的引用。