2015-06-26 29 views
16

Amazon Push Notifications uygulamasını iPhone uygulamam ile bütünleştirmeye çalışıyorum. Burada verilen eğiticiyi doğru bir şekilde takip ettim.AWS push bildirim hizmeti entegrasyonu hatası

Platform EndPoint'i oluştururken bu hatayı alıyorum. (Kimlik havuzlu bir izin sorunu görünüyor ???)

CognitoIdentityCredentials is not authorized to perform: SNS:CreatePlatformEndpoint 

tam ileti:

Error: Error Domain=com.amazonaws.AWSSNSErrorDomain Code=4 "The operation couldn’t be completed. (com.amazonaws.AWSSNSErrorDomain error 4.)" UserInfo=0x165dcef0 {Type=Sender, Message=User: arn:aws:sts::290442422498:assumed-role/Cognito_Laugh_DevUnauth_Role/CognitoIdentityCredentials is not authorized to perform: SNS:CreatePlatformEndpoint on resource: arn:aws:sns:us-east-1:290442422498:app/APNS_SANDBOX/Laugh, __text=(
"\n ", 
"\n ", 
"\n ", 
"\n " 
), Code=AuthorizationError} 

Kod

AWSRegionType const CognitoRegionType = AWSRegionUSEast1; 
AWSRegionType const DefaultServiceRegionType = AWSRegionUSEast1; 
NSString *const CognitoIdentityPoolId = @"us-east-1:0.................."; 
NSString *const SNSPlatformApplicationArn = @"arn:aws:sns:us-east-1:................"; 
NSString *const MobileAnalyticsAppId = @"YourMobileAnalyticsAppId"; 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    // Sets up the AWS Mobile SDK for iOS 
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:CognitoRegionType identityPoolId:CognitoIdentityPoolId]; 

AWSServiceConfiguration *defaultServiceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType 
                        credentialsProvider:credentialsProvider]; 

AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = defaultServiceConfiguration; 
} 


- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{ 

NSString *deviceTokenString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""]; 

NSLog(@"deviceTokenString: %@", deviceTokenString); 
[[NSUserDefaults standardUserDefaults] setObject:deviceTokenString forKey:@"deviceToken"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

AWSSNS *sns = [AWSSNS defaultSNS]; 
AWSSNSCreatePlatformEndpointInput *request = [AWSSNSCreatePlatformEndpointInput new]; 
request.token = deviceTokenString; 
request.platformApplicationArn = SNSPlatformApplicationArn; 

NSLog(@"SNSPlatformApplicationArn %@", SNSPlatformApplicationArn); 

[[sns createPlatformEndpoint:request] continueWithBlock:^id(BFTask *task) { 
    if (task.error != nil) { 
     NSLog(@"Error: %@",task.error); 
    } else { 
     AWSSNSCreateEndpointResponse *createEndPointResponse = task.result; 
     NSLog(@"endpointArn: %@",createEndPointResponse); 
     [[NSUserDefaults standardUserDefaults] setObject:createEndPointResponse.endpointArn forKey:@"endpointArn"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     //[self.window.rootViewController.childViewControllers.firstObject performSelectorOnMainThread:@selector(displayDeviceInfo) withObject:nil waitUntilDone:NO]; 

    } 

    return nil; 
}]; 

}

+0

"SNSPlatformApplicationArn" sabitini kullanabileceğinden emin misiniz? "PlatformApplicationArn" için açıklamaya baktığımda (http://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSSNSCreatePlatformEndpointInput.html#//api/name/platformApplicationArn), "PlatformApplicationArn" CreatePlatformApplication bir uç nokta oluşturmak için kullanılır. " –

cevap

15

konu AWS SNS konfigürasyonlarda oldu . >attach policy - Sen Roles altında AmazonSNSFullAccess ekleyebilir Auth ve UNAUTH rolleri

+0

Bunu nasıl çözdüğünüzü biraz detaylandırır mısınız? Bunu, IAM konsolunda, bilişsel olmayan bir rol için özel bir ilke ekleyerek ve ilkenin http: //docs.aws.amazon dosyasında açıklandığı gibi eylemin: CreatePlatformEndpoint kullanılarak el ile oluşturulmasının gerekeceği anlamına geldiğini farz ediyorum. .com/sns/son/dg/AccessPolicyLanguage_SpecialInfo.html? Bunu yaparken iyi bir dokümantasyon bulmakta güçlük çekiyorum, ama genel olarak IAM politikalarında biraz paslı olduğumu kabul ediyorum. SNS yapılandırmasında sabitlemiş olduğunu söylediğinden beri, gerekli ilkeyi eklemenin daha hızlı bir yolu olup olmadığını merak ettim. – JHH

+0

Ayrıca, politikada Kaynak ARN'lerini eklemeniz gerekir. – phatmann

+2

Teşekkürler! Aynı zamanda, sadece IAM Yönetim Konsolu'na gitmek ve doğru politikayı aramak ve SNS: CreatePlatformEndpoint'i eklemek zorunda kaldı. –

9

ikisi için politikasına: "CreatePlatformEndpoint SNS" Biz eklemeniz gerekir.

+0

Teşekkürler! İşe yarıyor –

İlgili konular