sns services precio notification example aws ios amazon-web-services push-notification amazon-sns amazon-cognito

ios - services - sns amazon example



AWS de AMAZON ¿Cómo me suscribo un punto final al tema de SNS? (3)

Estoy implementando notificaciones automáticas en una aplicación de iOS con los servicios de Amazon SNS y Amazon Cognito. Cognito guarda los tokens con éxito, mi aplicación recibe una notificación, todo funciona bien, pero hay una cosa.

Ahora, cuando todavía está en desarrollo, necesito agregar puntos finales manualmente a un tema SNS, para que todos los suscriptores puedan recibir notificaciones. Cuando introduzca una actualización en la tienda de aplicaciones, habrá miles de tokens para agregar.

Estaba estudiando la documentación de Amazon AWS, pero no había ninguna pista sobre si es posible lograrlo sin ese esfuerzo adicional.

Mi pregunta: ¿es posible suscribir automáticamente un punto final a un tema solo con servicios de Amazon?


No hay forma de suscribir automáticamente un punto final a un tema, pero puede lograr todo a través del código.

Puede llamar directamente a la API de Subscribe después de haber creado su punto final. A diferencia de otros tipos de suscripción, no se necesita confirmación con SNS Mobile Push.

Aquí hay un ejemplo de código Objective-C que crea un punto final y lo suscribe a un tema:

AWSSNS *sns = [AWSSNS defaultSNS]; AWSSNSCreatePlatformEndpointInput *endpointRequest = [AWSSNSCreatePlatformEndpointInput new]; endpointRequest.platformApplicationArn = MY_PLATFORM_ARN; endpointRequest.token = MY_TOKEN; [[[sns createPlatformEndpoint:endpointRequest] continueWithSuccessBlock:^id(AWSTask *task) { AWSSNSCreateEndpointResponse *response = task.result; AWSSNSSubscribeInput *subscribeRequest = [AWSSNSSubscribeInput new]; subscribeRequest.endpoint = response.endpointArn; subscribeRequest.protocols = @"application"; subscribeRequest.topicArn = MY_TOPIC_ARN; return [sns subscribe:subscribeRequest]; }] continueWithBlock:^id(BFTask *task) { if (task.cancelled) { NSLog(@"Task cancelled"); } else if (task.error) { NSLog(@"Error occurred: [%@]", task.error); } else { NSLog(@"Success"); } return nil; }];

Asegúrese de haber otorgado acceso a los sns:Subscribe en sus funciones de Cognito para permitir que su aplicación haga esta llamada.

Actualización 2015-07-08: actualizada para reflejar AWS iOS SDK 2.2.0+


Si desea usar credenciales estáticas en lugar de usar AWSCognito, deberá crearlas a través de la consola Amazons IAM.

Aquí está el código para inicializar Amazon en su delegado de la aplicación

// Sets up the AWS Mobile SDK for iOS // Initialize the Amazon credentials provider AWSStaticCredentialsProvider *credentialsProvider =[[AWSStaticCredentialsProvider alloc] initWithAccessKey:AWSAccessID secretKey:AWSSecretKey]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:DefaultServiceRegionType credentialsProvider:credentialsProvider]; [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

Fissh


Este es el código original para suscribir un punto final a un tema en Swift3

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { //Get Token ENDPOINT let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)}) //Create SNS Module let sns = AWSSNS.default() let request = AWSSNSCreatePlatformEndpointInput() request?.token = deviceTokenString //Send Request request?.platformApplicationArn = Constants.SNSDEVApplicationARN sns.createPlatformEndpoint(request!).continue({ (task: AWSTask!) -> AnyObject! in if task.error != nil { print("Error: /(task.error)") } else { let createEndpointResponse = task.result! as AWSSNSCreateEndpointResponse print("endpointArn: /(createEndpointResponse.endpointArn)") let subscription = Constants.SNSEndPoint //Use your own topic endpoint //Create Subscription request let subscriptionRequest = AWSSNSSubscribeInput() subscriptionRequest?.protocols = "application" subscriptionRequest?.topicArn = subscription subscriptionRequest?.endpoint = createEndpointResponse.endpointArn sns.subscribe(subscriptionRequest!).continue ({ (task:AWSTask) -> AnyObject! in if task.error != nil { print("Error subscribing: /(task.error)") return nil } print("Subscribed succesfully") //Confirm subscription let subscriptionConfirmInput = AWSSNSConfirmSubscriptionInput() subscriptionConfirmInput?.token = createEndpointResponse.endpointArn subscriptionConfirmInput?.topicArn = subscription sns.confirmSubscription(subscriptionConfirmInput!).continue ({ (task:AWSTask) -> AnyObject! in if task.error != nil { print("Error subscribing: /(task.error)") } return nil }) return nil }) } return nil }) }