iOS AWS SNS:客户如何确认SNS主题订阅?

时间:2015-12-29 21:58:02

标签: ios amazon-web-services amazon-sns

设备注册远程通知后(在应用程序中:didRegisterForRemoteNotificationsWithDeviceToken )我是:

  1. 使用设备令牌创建平台端点。
  2. 订阅主题。
  3. 尝试*确认主题订阅
  4. 我被困在上面列表中的第3步。我无法弄清楚如何获取创建“AWSSNSConfirmSubscriptionInput”对象以传递给“confirmSubscription”所需的令牌。

    我应该注意,尽管订阅未得到确认,我仍能从该主题发送APN。这不是iOS(应用程序协议)环境中的必要步骤吗?

    以下documentation州:

      

    要实际创建订阅,端点所有者必须使用确认消息中的令牌调用ConfirmSubscription操作。确认令牌有效期为三天。

    我无法弄清楚如何获取执行“ConfirmSubscription”操作所需的“令牌”。 “订阅”动作结果是“AWSSNSSubscribeResponse”类型,其仅具有单个属性“subscriptionArn”并且似乎不包含包括令牌的“确认消息”。那么如何获得此令牌呢?

    这是我的应用程序的主体:didRegisterForRemoteNotificationsWithDeviceToken委托方法:

    sns.createPlatformEndpoint(createPlatformEndPointInput).continueWithBlock { (task:AWSTask!) in
            if let error = task.error{
                XCGLogger.defaultInstance().error("Platform endpoint creation error: \(error)")
                return nil
            }
            let result = task.result as! AWSSNSCreateEndpointResponse
            let subscribeInput = AWSSNSSubscribeInput()
            subscribeInput.topicArn = "arn:aws:sns:us-west-2:xxx:topicname"
            subscribeInput.endpoint = result.endpointArn
            subscribeInput.protocols = "application"
            sns.subscribe(subscribeInput).continueWithBlock({ (task:AWSTask!) in
                if let subError = task.error{
                    XCGLogger.defaultInstance().error("Topic Subscription Error: \(subError)")
                    return nil
                }
                let subscribeResult = task.result as! AWSSNSSubscribeResponse
                XCGLogger.defaultInstance().debug("Subscription result: \(subscribeResult)")
                let subscriptionConfirmInput = AWSSNSConfirmSubscriptionInput()
                subscriptionConfirmInput.token = ?? //How do I get this??
                subscriptionConfirmInput.topicArn = "arn:aws:sns:xxx:myTopic"
                sns.confirmSubscription(subscriptionConfirmInput).continueWithBlock({ (task:AWSTask!) in
                    if let error = task.error{
                        XCGLogger.defaultInstance().error("Subscription Confirmation Error: \(error)")
                    }
                    return nil
                })
                return nil
            })
            return nil
        }
    

1 个答案:

答案 0 :(得分:1)

如果服务能够立即创建订阅,则

Subscribe将返回SubscriptionArn(无需端点所有者确认)。对于移动设备,应该是这种情况。

作为旁注,在注册设备时,您应该遵循此blog post中的伪代码。 AWS Mobile Hub可以使用推荐的工作流程生成用于注册设备和订阅主题的参考实现。