2013-05-17 41 views
1

由於GCM(以前稱爲C2DM)在Kindle Fire設備上不受支持,因此我現在正在搜索可用的其他最佳通知服務。 Kindle Fire的最佳通知服務是什麼?Nofication sample - 點燃火災

回答

0

嘗試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(); 
} 
+0

太謝謝你了 – Mathan