2013-11-05 7 views
9

Ich verwende die Amazon Web Service, um Push-Benachrichtigungen direkt an ein Gerät zu senden. Nachdem ich die App installiert habe, erhalte ich die Geräte-ID, die ich manuell zum Amazon SNS hinzufügen muss. Ich würde gerne wissen, ob es sowieso die Geräte-ID direkt beim Amazon-Server registriert, sobald der Benutzer die Anwendung startet.Geräte-ID direkt bei Amazon SNS registrieren

Ich habe gelesen this, aber fand es schwierig zu verstehen. Hat jemand schon Erfahrungen damit gemacht?

EDIT 2 (Was ich bisher getan haben)

ich gefolgt habe die Anweisungen von this link

  1. lade ich die snspobilepush.zip Datei, wie angewiesen und extrahieren und das Projekt importieren in die Finsternis. Ich füge die GCM-Projektnummer hinzu, füge die JAR-Dateien hinzu und führe die Anwendung aus. Ich erhalte meine Geräte-Registrierungs-ID.

  2. Ich öffne den Amazon SNS, füge meine Geräte ID hinzu und ich veröffentliche eine Nachricht. Ich empfange die Nachricht auf meinem Mobiltelefon. Funktioniert bisher großartig.

    MEIN PROBLEM

ich für meine Anwendung viele potentielle Nutzer würden mit. Daher macht das Hinzufügen jeder Geräte-ID zum SNS keinen Sinn. Ich brauche den Amazon SNS, um meine Geräte-ID beim Starten der App direkt zu registrieren. Gibt es eine Option für mich, das zu tun? Ich konnte keine definitive Antwort in den Dokumenten finden.
This link fordert mich auf, den "AWS Token Vending Service" zu verwenden. Ich konnte jedoch kein Beispiel dafür finden.

Antwort

1

Es ist Android AWS SDK verfügbar zu verwenden. Überprüfen Sie die Dokumentation Link aus: http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

Auch weitere Informationen zur Verfügung: http://aws.amazon.com/sdkforandroid/

+3

Ich habe beide diese Links durch. Ich fühle mich wie in Kreisen. Die Anweisungen sind sehr schlecht dokumentiert. – Anirudh

+0

Könnten Sie bitte den Code teilen, den Sie bisher versucht haben. Was sind die Fehler, die Sie bekommen? – doNotCheckMyBlog

+0

Hallo wieder! Der Code funktioniert einwandfrei, und ich bekomme keinen Fehler. Ich muss die Geräte-ID nur direkt beim Amazon-Server registrieren, was ich nicht kann (anstatt dass ich sie manuell hinzufügen muss). Ich habe meine Frage bearbeitet, um dies zu berücksichtigen. Bitte sehen Sie sich um. Vielen Dank! – Anirudh

10

Verwenden des AmazonSNSClient hier dokumentiert:

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

es sollte möglich sein, mithilfe von Code ähnlich wie diese registrieren:

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); 

Es war nicht mein ARN, aber das war dumm Tippfehler, auf den Reid hingewiesen hat und der jetzt oben behoben ist.

+0

Ich bin von PH, und während meine Internets wahrscheinlich in AUS (Office-Setup, nicht fragen) geroutet wird, verstehe ich nicht, warum das nur funktioniert, wenn ich meine SNS-App in US-Ost erstellen. Ich werde wahrscheinlich eine andere Frage stellen, aber da dies funktioniert, sollte es die akzeptierte Antwort sein. – josephus

+0

Ich ersetzte meins durch meine eigene 'platformApplicationArn'. – josephus

+0

Für alle anderen, die mit diesem Ansatz in den Fehler in der Region eintraten, war meine Lösung, die Region manuell auf dem SNSClient zu setzen. 'pushClient.setRegion (Region.getRegion (Regions.US_WEST_2));' –

0

Dies funktioniert für Firebase und Cognito. Eine AsyncTask ist erforderlich, um das Ausführen des Hauptthreads zu vermeiden.

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"); 
     } 
    } 
Verwandte Themen