通过 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(Google Cloud Messaging)是不是需要 Google 帐户?
GCM(Google Cloud Messaging)推送完全解析