2013-11-05 19 views
9

Sto utilizzando lo Amazon Web Service per inviare notifiche push direttamente a un dispositivo. Dopo aver installato l'app, ottengo l'ID del dispositivo, che devo aggiungere manualmente ad Amazon SNS. Vorrei sapere se è comunque necessario registrare l'ID del dispositivo direttamente con il server Amazon nel momento in cui l'utente avvia l'applicazione.Registrare l'ID del dispositivo direttamente con Amazon SNS

Ho letto this, ma ho trovato difficile capire. Qualcuno ha qualche precedente esperienza su come farlo?

EDIT 2 (Quello che ho fatto finora)

Ho seguito le istruzioni da this link

  1. ho scaricare il file snspobilepush.zip come indicato ed estrarre e importare il progetto in eclissi. Aggiungo il numero del progetto GCM, aggiungo i file jar ed eseguo l'applicazione. Ricevo l'ID di registrazione del mio dispositivo.

  2. Apro Amazon SNS, aggiungo il mio id dispositivo e pubblico un messaggio. Ricevo il messaggio sul mio cellulare. Funziona alla grande finora.

    mio problema

mi sarebbe avere un sacco di potenziali utenti per la mia applicazione. Quindi, l'aggiunta manuale di ogni ID dispositivo al SNS non ha senso. Ho bisogno che Amazon SNS registri direttamente l'ID del mio dispositivo quando avvio l'app. C'è qualche opzione per me per farlo? Non ho trovato nessuna risposta definitiva nei documenti.
This link mi dice di utilizzare il "servizio di vendita di token AWS". Tuttavia, non ho trovato alcun esempio su come farlo.

risposta

1

È disponibile Android SDK AWS. Controllare il link documentazione: http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

Inoltre, ulteriori informazioni disponibili: http://aws.amazon.com/sdkforandroid/

+3

Ho passato entrambi questi collegamenti. Mi sento come se stessi girando in tondo. Le istruzioni sono molto scarsamente documentate. – Anirudh

+0

Potresti condividere il codice che hai provato fino ad ora. Quali sono gli errori che stai ottenendo? – doNotCheckMyBlog

+0

Ciao di nuovo! Il codice funziona bene e non ho alcun errore. Ho solo bisogno di registrare l'id del dispositivo direttamente con il server Amazon che non sono in grado di fare (invece di doverlo aggiungere manualmente). Ho modificato la mia domanda per includerla. Pls dare un'occhiata. Grazie! – Anirudh

10

Uso del AmazonSNSClient documentato qui:

http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

dovrebbe essere possibile registrare utilizzando codice simile a questo:

AWSCredentials awsCredentials = new BasicAWSCredentials("XXXXXX", XXXXXXXXXXXXXXX"); 
String platformApplicationArn = "arn:aws:sns:us-east-1:123456789:app/GCM/myappname"; 
AmazonSNSClient pushClient = new AmazonSNSClient(awsCredentials); 

String customPushData = "my custom data"; 
CreatePlatformEndpointRequest platformEndpointRequest = new CreatePlatformEndpointRequest(); 
platformEndpointRequest.setCustomUserData(customPushData); 
platformEndpointRequest.setToken(pushNotificationRegId); 
platformEndpointRequest.setPlatformApplicationArn(platformApplicationArn); 
CreatePlatformEndpointResult result = pushClient.createPlatformEndpoint(platformEndpointRequest); 
Log.w(TAG, "Amazon Push reg result: " + result); 

Non mi piaceva il mio ARN, ma quello era uno stupido errore di battitura che Reid ha sottolineato ed è ora riparato sopra.

+0

Sono di PH, e mentre i miei interni sono probabilmente instradati in AUS (installazione dell'ufficio, non chiedere), non capisco perché questo funziona solo quando creo la mia app SNS negli Stati Uniti-Est. Probabilmente farò una domanda diversa per quello, ma poiché funziona, dovrebbe essere la risposta accettata. – josephus

+0

Ho sostituito il mio con il mio 'platformApplicationArn'. – josephus

+0

Per chiunque altro abbia eseguito l'accesso all'errore della regione utilizzando questo approccio come ero, la mia soluzione era quella di impostare manualmente la regione su SNSClient. 'pushClient.setRegion (Region.getRegion (Regions.US_WEST_2));' –

0

Questo funziona per Firebase e Cognito. Un AsyncTask è necessario per evitare l'esecuzione sul thread principale.

private class RegisterIdForAWS extends AsyncTask<String, Void, Void> { 

     private Exception exception; 

     protected Void doInBackground(String... urls) { 
      try { 
       String pushNotificationRegId = FirebaseInstanceId.getInstance().getToken(); 

       if (pushNotificationRegId != null) { 

        CognitoCachingCredentialsProvider provider = new CognitoCachingCredentialsProvider(
          getApplicationContext(), 
          "us-west-2:aaaaaaaaa-1234-1234-1234-0bbbbbbbbbbbb", 
          Regions.US_WEST_2); 
        String platformApplicationArn = "arn:aws:sns:us-west-2:123456789:app/GCM/appname"; 
        AmazonSNSClient pushClient = new AmazonSNSClient(provider); 
        pushClient.setRegion(Region.getRegion(Regions.US_WEST_2)); 

        String customPushData = ""; 
        CreatePlatformEndpointRequest platformEndpointRequest = new CreatePlatformEndpointRequest(); 
        platformEndpointRequest.setCustomUserData(customPushData); 
        platformEndpointRequest.setToken(pushNotificationRegId); 
        platformEndpointRequest.setPlatformApplicationArn(platformApplicationArn); 
        CreatePlatformEndpointResult result = pushClient.createPlatformEndpoint(platformEndpointRequest); 
        Log.w(TAG, "Amazon Push reg result: " + result); 
       } 
      } catch (Exception e) { 
       this.exception = e; 
      } 

      return null; 
     } 

     protected void onPostExecute(String text) { 
      Log.w(TAG, "Amazon Push reg Finished"); 
     } 
    } 
Problemi correlati