将Android设备作为服务器,直接向GCM发送消息

将Android设备作为服务器,直接向GCM发送消息,android,google-cloud-messaging,Android,Google Cloud Messaging,是否有任何可能的方法使我的android设备充当服务器,为其他设备发送gcm消息。我知道如何使用webservice和所有这些。但我只想使用android设备直接发送gcm msz 谢谢 在android设备上编写服务器端应用程序: 将gcm-server.jar文件从SDK的gcm server/dist目录复制到服务器类路径 创建一个servlet(或其他服务器端机制),Android应用程序可以使用该servlet发送GCM收到的注册ID。应用程序可能还需要发送其他信息,如用户的电子邮件地

是否有任何可能的方法使我的android设备充当服务器,为其他设备发送gcm消息。我知道如何使用webservice和所有这些。但我只想使用android设备直接发送gcm msz


谢谢

在android设备上编写服务器端应用程序:

将gcm-server.jar文件从SDK的gcm server/dist目录复制到服务器类路径

创建一个servlet(或其他服务器端机制),Android应用程序可以使用该servlet发送GCM收到的注册ID。应用程序可能还需要发送其他信息,如用户的电子邮件地址或用户名,以便服务器可以将注册ID与拥有设备的用户相关联。 类似地,创建一个用于注销注册ID的servlet。 当服务器需要向注册ID发送消息时,它可以使用gcm库中的com.google.android.gcm.server.Sender助手类

For example:
import com.google.android.gcm.server.*;

Sender sender = new Sender(myApiKey);
Message message = new Message.Builder().build();
MulticastResult result = sender.send(message, devices, 5);
上面的代码段执行以下操作:

使用项目的API密钥创建发件人对象。 使用给定的注册ID创建消息(消息生成器还具有设置所有消息参数(如折叠密钥和有效负载数据)的方法)。 发送最多5次重试尝试的消息(如果GCM服务器不可用),并在结果时存储响应。 现在有必要分析结果,并在以下情况下采取适当的操作:

如果消息已创建,但结果返回了规范注册ID,则有必要将当前注册ID替换为规范注册ID。 如果返回的错误未注册,则有必要删除该注册ID,因为应用程序已从设备上卸载。 以下是处理以下两种情况的代码段:

if (result.getMessageId() != null) {
 String canonicalRegId = result.getCanonicalRegistrationId();
 if (canonicalRegId != null) {
   // same device has more than on registration ID: update database
 }
} else {
 String error = result.getErrorCodeName();
 if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
   // application has been removed from device - unregister database
 }
}
所需的权限是:

    <!-- App receives GCM messages. -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <!-- GCM connects to Google Services. -->
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- GCM requires a Google account. -->
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- Keeps the processor from sleeping when a message is received. -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="my_app_package.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="my_app_package.permission.C2D_MESSAGE" /> 

您还需要:
com.google.android.c2dm.permission.SEND permission


欲了解更多信息,请浏览更多内容。请不要询问util,除非您对内容进行了很好的探索。

谢谢Arpit Garg,我已经做了。但我只想直接将gcm消息从一个设备发送到另一个设备。使用硬编码Regid。我想从双向通信中消除webserver或servlet。可能吗?@Roodie在提供的代码中,不需要web服务器或servlet。只需使用硬编码regid在应用程序中提供发送和接收控件,并在两台设备上启动应用程序即可。。您可以根据需要在两者之间进行通信。但要确保云计算是必要的,这样调解人就只能是云计算了……这对我不起作用。在manifst中是否有对发送方的特殊许可?你试过了吗?