2013-11-05 36 views
9

Doğrudan bir cihaza push bildirimleri göndermek için Amazon Web Service kullanıyorum. Uygulamayı yükledikten sonra cihaz kimliğini alıyorum, Amazon SNS'ye manuel olarak eklemem gerekiyor. Cihazın kimliğini, kullanıcının uygulamayı başlattığı an doğrudan amazon sunucusuyla kaydettirmek için bir şey olup olmadığını bilmek istiyorum.Cihaz kimliğini doğrudan Amazon SNS ile kaydetme

this okudum, ancak anlaşılması zor bulundu. Bunun nasıl yapılacağına dair herhangi bir deneyimi var mı? this link

  1. den

    (şimdiye kadar ne yaptım) DÜZENLEME 2

    ben takip ettim talimatları emrettiğim gibi snspobilepush.zip dosyayı indirmek ve ayıklamak ve projeyi içe tutulmaya. GCM proje numarasını ekledim, kavanoz dosyalarını ekledim ve uygulamayı çalıştırdım. Cihaz kayıt adımı aldım.

  2. Amazon SNS'yi açıp, aygıt kimliğimi ekledim ve bir ileti yayınlıyorum. Mesajı cep telefonumdan aldım. Şimdiye kadar harika çalışıyor.

    MY SORUN

Uygulamam için potansiyel kullanıcıların çok sahip olacaktır. Bu yüzden her cihaz kimliğini SNS'ye manuel olarak eklemek hiç mantıklı değil. Uygulamayı başlattığımda cihaz kimliğimi doğrudan kaydetmek için Amazon SNS'ye ihtiyacım var. Bunu yapmam için herhangi bir seçenek var mı? Dokümanlarda kesin bir cevap bulamadım.
This link "AWS Jetonlu Satış Hizmeti" ni kullanmamı söyledi. Ancak, bunun nasıl yapılacağına dair bir örnek bulamadım.

cevap

1

Kullanılabilecek Android AWS SDK var. Mevcut Ayrıca http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

, daha fazla bilgi: belge bağlantısını kontrol edin http://aws.amazon.com/sdkforandroid/

+3

Bu iki bağlantıdan da geçiyorum. Çevrelerinde dolaştığımı hissediyorum. Talimatlar çok zayıf bir şekilde belgelenmiştir. – Anirudh

+0

Şimdiye kadar denediğiniz kodu paylaşabilir misiniz? Aldığınız hatalar neler? – doNotCheckMyBlog

+0

Tekrar merhaba! Kod iyi çalışıyor ve hiç bir hata alamıyorum. Cihaz kimliğini sadece doğrudan yapamadığım Amazon sunucusu ile kaydetmem gerekiyor (yerine el eklemem gerekiyor). Bunu dahil etmek için sorumu düzenledim. Pls bir göz var. Teşekkürler! – Anirudh

10

AmazonSNSClient burada belgelenen kullanma:

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

benzer bir kod kullanarak kayıt mümkün olmalıdır:

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

ARN'mi beğenmiyordu, ama bu aptalca bir şeydi. Reid'in dikkat çektiği ve yukarıda düzeltildiği yazım hatası.

+0

PH'dan ve internetlerim muhtemelen AUS'ta (ofis kurulumu, sorma) yönlendirilirken, bunun neden sadece ABD-Doğu'da SNS uygulamamı oluşturduğumda işe yaradığını anlamıyorum. Muhtemelen bunun için farklı bir soru soracaktır, ama bu işe yaradığı için kabul edilen cevap olmalıdır. – josephus

+0

Benim kendi platformApplicationArn'ımla değiştirdim. – josephus

+0

Bu yaklaşımı kullanarak bölgeye giren herkes için hata, çözümüm SNSClient üzerinde bölgeyi manuel olarak ayarlamaktı. 'pushClient.setRegion (Region.getRegion (Bölgeler.US_WEST_2));' –

0

Bu, Firebase and Cognito için çalışıyor. Ana Konu üzerinde çalışmamak için bir AsyncTask gereklidir.

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"); 
     } 
    } 
İlgili konular