1
由於GCM(以前稱爲C2DM)在Kindle Fire設備上不受支持,因此我現在正在搜索可用的其他最佳通知服務。 Kindle Fire的最佳通知服務是什麼?Nofication sample - 點燃火災
由於GCM(以前稱爲C2DM)在Kindle Fire設備上不受支持,因此我現在正在搜索可用的其他最佳通知服務。 Kindle Fire的最佳通知服務是什麼?Nofication sample - 點燃火災
嘗試Amazon Device Messaging API (beta):
亞馬遜設備消息(ADM),讓您從 雲發送推送通知來運行你的應用程序的Kindle Fire設備。
ADM是一種傳輸機制,已針對隊列消息進行了優化,並將它們傳送到您應用的目標實例。你所做的與 這些消息取決於你。例如,收到消息後,您的應用可能會發布通知,顯示自定義用戶界面 或同步數據。
除了爲每個 消息提供高達6KB的最佳有效負載大小之外,開發人員可免費獲得ADM。
這裏是一個code sample for sending a notification:
/**
* Request that ADM deliver your message to a specific instance of your app.
*/
public void sendMessageToDevice(String registrationId, String accessToken) throws Exception
{
// JSON payload representation of the message.
JSONObject payload = new JSONObject();
// Define the key/value pairs for your message content and add them to the
// message payload.
JSONObject data = new JSONObject();
data.put("firstKey", "firstValue");
data.put("secondKey", "secondValue");
payload.put("data", data);
// Add a consolidation key. If multiple messages are pending delivery for a particular
// app instance with the same consolidation key, ADM will attempt to delivery the most
// recently added item.
payload.put("consolidationKey", "ADM_Enqueue_Sample");
// Add an expires-after value to the message of 1 day. If the targeted app instance does not
// come online within the expires-after window, the message will not be delivered.
payload.put("expiresAfter", 86400);
// Convert the message from a JSON object to a string.
String payloadString = payload.toString();
// Establish the base URL, including the section to be replaced by the registration
// ID for the desired app instance. Because we are using String.format to create
// the URL, the %1$s characters specify the section to be replaced.
String admUrlTemplate = "https://api.amazon.com/messaging/registrations/%1$s/messages";
URL admUrl = new URL(String.format(admUrlTemplate,registrationId));
// Generate the HTTPS connection for the POST request. You cannot make a connection
// over HTTP.
HttpsURLConnection conn = (HttpsURLConnection) admUrl.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// Set the content type and accept headers.
conn.setRequestProperty("content-type", "application/json");
conn.setRequestProperty("accept", "application/json");
conn.setRequestProperty("X-Amzn-Type-Version ", "[email protected]");
conn.setRequestProperty("X-Amzn-Accept-Type", "[email protected]");
// Add the authorization token as a header.
conn.setRequestProperty("Authorization", "Bearer " + accessToken);
// Obtain the output stream for the connection and write the message payload to it.
OutputStream os = conn.getOutputStream();
os.write(payloadString.getBytes(), 0, payloadString.getBytes().length);
os.flush();
conn.connect();
// Obtain the response code from the connection.
int responseCode = conn.getResponseCode();
// Check if we received a failure response, and if so, get the reason for the failure.
if(responseCode != 200)
{
if(responseCode == 401)
{
// If a 401 response code was received, the access token has expired. The token should be refreshed
// and this request may be retried.
}
String errorContent = parseResponse(conn.getErrorStream());
throw new RuntimeException(String.format("ERROR: The enqueue request failed with a " +
"%d response code, with the following message: %s",
responseCode, errorContent));
}
else
{
// The request was successful. The response contains the canonical Registration ID for the specific instance of your
// app, which may be different that the one used for the request.
String responseContent = parseResponse(conn.getInputStream());
JSONObject parsedObject = new JSONObject(responseContent);
String canonicalRegistrationId = parsedObject.getString("registrationID");
// Check if the two Registration IDs are different.
if(!canonicalRegistrationId.equals(registrationId))
{
// At this point the data structure that stores the Registration ID values should be updated
// with the correct Registration ID for this particular app instance.
}
}
}
private String parseResponse(InputStream in) throws Exception
{
// Read from the input stream and convert into a String.
InputStreamReader inputStream = new InputStreamReader(in);
BufferedReader buff = new BufferedReader(inputStream);
StringBuilder sb = new StringBuilder();
String line = buff.readLine();
while(line != null)
{
sb.append(line);
line = buff.readLine();
}
return sb.toString();
}
太謝謝你了 – Mathan