通过 GCM(Google Cloud Messaging)在两个不同的应用程序之间进行通信

Posted

技术标签:

【中文标题】通过 GCM(Google Cloud Messaging)在两个不同的应用程序之间进行通信【英文标题】:Communication through GCM(Google Cloud Messaging) between two different apps 【发布时间】:2014-02-26 12:19:06 【问题描述】:

我有两个应用程序 C 和 D。我想要实现的是通过 GCM 从 C(在一个设备上)向 D(在不同设备上)发送通知。当用户点击应用 D 收到的通知时,D 内的一个 Activity 就会启动。我不知道我能不能做到这一点。我能够在安装在不同设备上的应用程序中发送和接收通知,但不同应用程序之间的通信在我看来有点棘手。任何帮助,将不胜感激。

【问题讨论】:

你的问题很好,但很棘手。 你知道怎么做吗? 是的,但首先你需要实现GCM 然后我们会处理这些东西。 我已经这样做了 【参考方案1】:

您可以通过以下方式执行此操作:

这两个应用可以使用相同的发件人 ID,也可以使用不同的发件人 ID。如果他们使用不同的发件人 ID,您的服务器将需要为每个发件人 ID 使用不同的 API 密钥。两个应用没有理由使用相同的包名。

您的服务器将接受来自这两个应用的注册 ID。您必须将每个注册 ID 存储在一个字段中,该字段表明它属于哪个应用程序。

如果一台设备上的应用程序 C 想要向另一台设备上的应用程序 D 发送 GCM 消息,它会向服务器发送一条消息(以某种方式指示接收设备和应用程序的标识符 - 由您决定如何发送识别收件人)。然后服务器会找到应用 D 的接收设备的注册 ID,并使用与该应用匹配的 API 密钥将消息发送到该设备。

【讨论】:

谢谢伊兰。会试试的:) 如果我必须在接收应用程序中添加一些权限(在这种情况下为 D),请告诉我。 @Puneetr90 您不需要任何特殊权限。您需要任何使用 GCM 的应用程序所需的常规权限。【参考方案2】:

是的,您可以为两个应用使用相同的发件人 ID。但是,当您发送消息时,您指定了一个注册 ID,该 ID 隐式链接到生成它的应用程序 + 设备的包名称。只有请求注册 ID 的应用才会收到您的消息。最后,您必须为两个应用程序输入相同的包名称。

注意:您不能在 android 设备上安装两个具有相同包名的应用程序。

根据评论编辑:

如果您知道另一个应用程序的包名称,您可以这样做。说,它会是:

    com.example.myappD

现在,使用 Intent 并启动默认启动器活动:

Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.example.myappD");
startActivity(LaunchIntent);

在启动器活动onCreate() 中,只需检查您从哪里导航到此活动。如果您来自通知,则启动所需的活动。

【讨论】:

谢谢曼尼什。我已经这样做了。但问题是如何将待处理的意图(当用户单击通知时打开)作为来自不同应用程序的活动传递。 谢谢曼尼什。这真的很有帮助:) 另外我认为,我必须在接收应用程序的清单文件中指定一些权限,以让它从不同的应用程序获得通知。如果我错了,请纠正我。 你能告诉我我需要提供什么权限吗?我很困惑:P

以上是关于通过 GCM(Google Cloud Messaging)在两个不同的应用程序之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Message (GCM) sent android is Error inValid Register

是否可以使用 gcm css 以现有 xmpp 用户登录?

GCM(Google Cloud Messaging)是不是需要 Google 帐户?

GCM(Google Cloud Messaging)推送完全解析

Google Cloud端点模块与GCM的Google云端模块?

ios Google Cloud Messaging (GCM) 未收到远程通知