14

Amazon SNS と Amazon Cognito サービスを使用して iOS アプリにプッシュ通知を実装しています。Cognito はトークンを正常に保存し、私のアプリは通知を受け取り、すべてがうまく機能していますが、問題があります。

現在、まだ開発中ですが、エンドポイントを SNS トピックに手動で追加して、すべてのサブスクライバーが通知を受け取ることができるようにする必要があります。アップデートを App Store にプッシュすると、何千ものトークンが追加されます。

私は Amazon AWS のドキュメントを調べていましたが、追加の努力なしにそれを実現できるかどうかはわかりませんでした。

私の質問: Amazon サービスのみでエンドポイントをトピックに自動的にサブスクライブすることは可能ですか?

4

3 に答える 3

3

これは、エンドポイントをトピックにサブスクライブする元のコードです。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

        })
    }
于 2016-11-11T15:17:44.273 に答える
1

AWSCognito を使用する代わりに静的認証情報を使用する場合は、Amazon の IAM コンソールを使用してそれらを作成する必要があります。

アプリデリゲートでAmazonを初期化するためのコードは次のとおりです

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

フィッシュ

于 2015-04-23T03:02:24.393 に答える