ADM (Amazon Android)

Usage

  1. Set your environment variables.

     config :pigeon, :adm,
       client_id: "your_oauth2_client_id_here",
       client_secret: "your_oauth2_client_secret_here"
  2. Create a notification packet.

     msg = %{ "body" => "your message" }
     n = Pigeon.ADM.Notification.new("your device registration ID", msg)
  3. Send the packet.

     Pigeon.ADM.push(n)

Handling Push Responses

  1. Pass an optional anonymous function as your second parameter.

     data = %{ message: "your message" }
     n = Pigeon.ADM.Notification.new("device registration ID", data)
     Pigeon.ADM.push(n, on_response: fn(x) -> IO.inspect(x) end)
  2. Responses return a notification with an updated :response key. You could handle responses like so:

     on_response_handler = fn(x) ->
       case x.response do
         :success ->
           # Push successful
           :ok
         :update ->
           new_reg_id = x.updated_registration_id
           # Update the registration ID in the database
         :invalid_registration_id ->
           # Remove the bad ID from the database
         :unregistered ->
           # Remove the bad ID from the database
         error ->
           # Handle other errors
       end
     end
    
     data = %{ message: "your message" }
     n = Pigeon.ADM.Notification.new("your registration id", data)
     Pigeon.ADM.push(n, on_response: on_response_handler)

Error Responses

Taken from Amazon Device Messaging docs

ReasonDescription
:invalid_registration_idInvalid Registration Token
:invalid_dataBad format JSON data
:invalid_consolidation_keyInvalid Consolidation Key
:invalid_expirationInvalid expiresAfter value
:invalid_checksumInvalid md5 value
:invalid_typeInvalid Type header
:unregisteredApp instance no longer available
:access_token_expiredExpired OAuth access token
:message_too_largeData size exceeds 6 KB
:max_rate_exceededSee Retry-After response header
:unknown_errorUnknown Error