2013-05-09 160 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

相關問題