如何使用Go发送复杂数据到FCM/GCM?

3

FCM和GCM文档都将data有效负载的结构定义为map[string]string(尽管Google的GCM包将其实现为map[string]interface{})。

然而,在许多情况下,简单的平面键值结构无法满足应用程序的需求。一些例子是需要值的切片或者需要发送另一个非平凡结构。

以最简洁的方式发送更复杂的数据结构作为map[string]string,这将是最清晰的方法是什么?


结论:我将fl0cke的答案标记为正确,因为它提供了使用Go发送复杂数据的解决方案。然而,从FCM文档中可以看出,未来数据的意图是以键值对字符串形式进行传递,为了确保将来不会出现任何问题,我将坚持使用简单的键值对字符串。

你好,请问您能告诉我在哪里可以获取实现gcm-go包的示例代码吗?我一直在尝试,但没有找到任何示例代码。 - Rajeev Kumar
@RajeevKumar 我不知道是否有官方的示例代码,但如果你使用谷歌搜索,会发现有很多博客文章/教程。 - JohnGB
1个回答

2
根据这个答案,使用FCM/GCM可以发送嵌套数据。为此,您可以编写自己的FCM客户端或者分叉谷歌的实现并更改Data的类型定义。
type Data map[string]interface{}

to

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文档(而非库)中的要求指出,“data”必须是一组键值对。这是否不准确? - JohnGB
@JohnGB 根据这个答案,发送嵌套数据是可行的。 - fl0cke
谷歌有没有确认他们会支持这个?我所看到的所有文档都明确指出它们应该是键值字符串对。 - JohnGB
如果您想要100%确定,仍然可以将数据序列化为JSON字符串并通过此方式发送。稍后我会更新我的答案并提出一些建议。 - fl0cke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接