AWS push notification service integration error

I am trying to integrate Amazon Push Notifications to my iPhone app. I did follow the tutorial provided here correctly.

I am getting this error when creating the Platform EndPoint. (Seems a permission issue with identity pool???)

  • UIWebView not displaying my webpage
  • Send an array as a parameter in a Alamofire POST request
  • Amazon SNS Mobile Push - how to bulk subscribe endpoints to a topic?
  • How can I check the existence of a key/file on an Amazon S3 Bucket using AWS iOS SDK v2?
  • Incrementing Number Property in AWS DynamoDB Objective C
  • AWS iOS SDK Cognito Developer Authentication (Swift)
  • CognitoIdentityCredentials is not authorized to perform: SNS:CreatePlatformEndpoint
    

    Full message:

    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}
    

    Code

    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;
    }];
    

    }

    2 Solutions Collect From Internet About “AWS push notification service integration error”

    The issue was in the AWS SNS configurations. We need to add “SNS:CreatePlatformEndpoint” to the policy for both Auth and Unauth roles

    You can add AmazonSNSFullAccess under Roles->attach policy.