5

有什么方法可以让我的 android 设备充当服务器为另一台设备发送 gcm 消息。我知道使用网络服务和所有的方式。但我只想使用 android 设备直接发送 gcm msz。

谢谢。

4

1 回答 1

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

有关更多信息,请探索更多..请不要问 util ,除非您很好地探索了这些东西。 推荐链接

于 2013-05-09T10:33:58.043 回答