2013-11-05 24 views
9

Używam urządzenia Amazon Web Service do wysyłania powiadomień push bezpośrednio do urządzenia. Po zainstalowaniu aplikacji otrzymuję identyfikator urządzenia, który muszę ręcznie dodać do usługi Amazon SNS. Chciałbym wiedzieć, czy istnieje jakakolwiek rejestracja identyfikatora urządzenia bezpośrednio z serwerem Amazon w momencie, gdy użytkownik uruchomi aplikację.Zarejestruj identyfikator urządzenia bezpośrednio za pomocą usługi Amazon SNS

Przeczytałem this, ale okazało się to trudne do zrozumienia. Czy ktoś ma jakieś wcześniejsze doświadczenie, jak to zrobić?

EDIT 2 (Co mam zrobić do tej pory)

I już po instrukcje od this link

  1. pobrać plik snspobilepush.zip zgodnie z instrukcją i wyodrębnić i importować projekt w zaćmienie. Dodaję numer projektu GCM, dodaję pliki jar i uruchamiam aplikację. Dostaję mój identyfikator rejestracji urządzenia.

  2. Otwieram serwis Amazon SNS, dodaję identyfikator urządzenia i publikuję wiadomość. Otrzymuję wiadomość na mój telefon komórkowy. Działa jak dotąd świetnie.

    mój problem

byłbym o wiele potencjalnych użytkowników dla mojej aplikacji. Dlatego ręczne dodawanie każdego identyfikatora urządzenia do SNS nie ma sensu. Potrzebuję usługi Amazon SNS do bezpośredniego rejestrowania identyfikatora urządzenia po uruchomieniu aplikacji. Czy jest jakaś opcja dla mnie, aby to zrobić? Nie mogłem znaleźć żadnej ostatecznej odpowiedzi w dokumentach.
This link mówi mi, żebym użył "usługi tokenowej usługi AWS". Jednak nie mogłem znaleźć żadnego przykładu, jak to zrobić.

Odpowiedz

1

Dostępna jest aplikacja Android AWS SDK. Sprawdź odnośnik dokumentacji: http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

także więcej informacji na temat dostępnych: http://aws.amazon.com/sdkforandroid/

+3

Przeszedłem przez oba te linki. Czuję, że kręcę się w kółko. Instrukcje są bardzo słabo udokumentowane. – Anirudh

+0

Czy mógłbyś/chciałabyś udostępnić kod, który wypróbowałeś do tej pory. Jakie są błędy, które otrzymujesz? – doNotCheckMyBlog

+0

Witaj ponownie! Kod działa poprawnie i nie dostaję żadnego błędu. Potrzebuję tylko zarejestrować identyfikator urządzenia bezpośrednio na serwerze Amazon, którego nie jestem w stanie zrobić (zamiast mnie ręcznie muszę go dodać). Zmieniłem moje pytanie, aby je uwzględnić. Pls mają wygląd. Dzięki! – Anirudh

10

Używanie AmazonSNSClient udokumentowane tutaj:

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

powinno być możliwe, aby zarejestrować się używając kodu podobnego do tego:

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

To nie polubiło mojego ARN, ale to było głupie literówka, którą Reid wskazał i jest teraz naprawiona powyżej.

+0

Jestem z PH, i chociaż moje Internet jest prawdopodobnie routowane w AUS (ustawienia biura, nie pytaj), nie rozumiem, dlaczego to działa tylko wtedy, gdy tworzę aplikację SNS w USA-East. Prawdopodobnie zada sobie inne pytanie, ale skoro to działa, to powinna być zaakceptowana. – josephus

+0

Zastąpiłem kopalnię moim 'platformApplicationArn'. – josephus

+0

Dla każdego, kto był w regionie błędu używając tego podejścia, tak jak ja, moim rozwiązaniem było ręczne ustawienie regionu na SNSClient. 'pushClient.setRegion (Region.getRegion (Regions.US_WEST_2));' –

0

To działa dla Firebase i Cognito. Funkcja AsyncTask jest niezbędna, aby uniknąć uruchamiania głównego wątku.

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"); 
     } 
    } 
Powiązane problemy