2013-05-09 165 views

回答

1

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

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

创建一个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密钥发件人对象。 使用给定的注册ID创建消息(消息构建器还具有设置所有消息参数(如折叠键和有效内容数据)的方法)。 发送最多5次重试尝试的消息(以防GCM服务器不可用),并将响应存储在结果中。 现在有必要分析结果并在以下情况下采取适当的措施:

如果消息已创建但结果返回了规范注册ID,则需要用当前注册ID替换规范注册ID。 如果返回的错误是NotRegistered,则需要删除该注册ID,因为应用程序是从设备上卸载的。 这里有一个代码段处理这2个条件:

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,除非你对事情做得很好。Referal Link

+0

谢谢Arpit Garg 我已经做到了。 但我只是想直接从一台设备发送gcm消息到另一台设备。使用硬编码的Regid。我想从双向通信中消除webserver或servlet。 是否有可能。? – Roodie 2013-05-09 10:38:28

+0

@Roodie在提供的代码中,不需要Web服务器或servlet。只需使用硬编码的regid提供应用程序中的发送和接收控件,并在两个设备上启动应用程序即可。您可以根据需要在两者之间进行通信。但是确保云是必要的,所以调解员将只是云.. – 2013-05-10 05:51:43

+0

它没有为我工作。 是否有任何特殊的许可发件人一方要形容? 你试过了吗? – Roodie 2013-05-11 04:09:30

相关问题