是否有任何可能的方式使我的Android設備充當服務器發送gcm消息爲另一個設備。我知道使用webservice和所有的方式。但我只想使用Android設備直接發送gcm msz。使Android設備作爲服務器直接發送消息給GCM
謝謝。
是否有任何可能的方式使我的Android設備充當服務器發送gcm消息爲另一個設備。我知道使用webservice和所有的方式。但我只想使用Android設備直接發送gcm msz。使Android設備作爲服務器直接發送消息給GCM
謝謝。
要編寫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
謝謝Arpit Garg 我已經做到了。 但我只是想直接從一臺設備發送gcm消息到另一臺設備。使用硬編碼的Regid。我想從雙向通信中消除webserver或servlet。 是否有可能。? – Roodie 2013-05-09 10:38:28
@Roodie在提供的代碼中,不需要Web服務器或servlet。只需使用硬編碼的regid提供應用程序中的發送和接收控件,並在兩個設備上啓動應用程序即可。您可以根據需要在兩者之間進行通信。但是確保雲是必要的,所以調解員將只是雲.. – 2013-05-10 05:51:43
它沒有爲我工作。 是否有任何特殊的許可發件人一方要形容? 你試過了嗎? – Roodie 2013-05-11 04:09:30