使Android Device As Server直接向GCM发送消息

时间:2013-05-09 10:27:28

标签: android google-cloud-messaging

有没有办法让我的Android设备充当服务器,为另一台设备发送gcm消息。我知道使用webservice的方式和所有。但我想只使用Android设备直接发送gcm msz。

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

创建一个servlet(或其他服务器端机制),Android应用程序可以使用该机制发送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密钥创建Sender对象。 使用给定的注册ID创建消息(消息构建器还具有设置所有消息参数的方法,例如折叠键和有效负载数据)。 发送消息时最多尝试5次(如果GCM服务器不可用),并将响应存储在结果中。 现在有必要解析结果并在以下情况下采取适当的措施:

如果消息已创建但结果返回了规范的注册ID,则必须将当前注册ID替换为规范注册ID。 如果返回的错误是NotRegistered,则必须删除该注册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

欲了解更多信息,请浏览更多信息.. 请不要问工具,除非您仔细研究过这些事情。 Referal Link