首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AWS v2 SNS中的iOS -createPlatformEndpoint:请求

AWS v2 SNS中的iOS -createPlatformEndpoint:请求
EN

Stack Overflow用户
提问于 2014-08-31 02:17:01
回答 1查看 1.7K关注 0票数 3

当我在SNS控制台中设置端点时,推送工作。现在,我开始允许iOS应用程序创建端点。然后是订阅。

问题是BFTask *task = [sns createPlatformEndpoint:request];返回,task.result是零,而不是AWSSNSCreateEndpointResponse*。顺便说一下,task.error也是零。

来自.h文件:

  • @返回BFTask的一个实例。在成功执行时,task.result将包含一个AWSSNSCreateEndpointResponse实例。执行失败时,task.error可能包含带有AWSSNSErrorDomain domian的NSError和以下错误代码: AWSSNSErrorInvalidParameter、AWSSNSErrorInternalError、AWSSNSErrorAuthorizationError、AWSSNSErrorNotFound。

亚马逊还在SDK v2中为SNS创建了示例。因此,我还想找一个可能有一些使用SDK v2创建端点和订阅的例子的人。

应用程序启动后,我从以下位置调用我的方法:

代码语言:javascript
复制
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [self awsStartWithDeviceToken:deviceToken];
} 

守则:

代码语言:javascript
复制
- (void)awsStartWithDeviceToken:(NSData *)deviceToken {

    // Get a hex string for the NSData deviceToken
    // http://stackoverflow.com/questions/7520615/how-to-convert-an-nsdata-into-an-nsstring-hex-string
    NSUInteger dataLength = [deviceToken length];
    NSMutableString *deviceTokenString = [NSMutableString stringWithCapacity:dataLength*2];
    const unsigned char *dataBytes = [deviceToken bytes];
    for (NSInteger idx = 0; idx < dataLength; ++idx) {
        [deviceTokenString appendFormat:@"%02x", dataBytes[idx]];
    }

    // Set the log level
    [AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose;

    // Login
    AWSStaticCredentialsProvider *credentialsProvider = [AWSStaticCredentialsProvider credentialsWithAccessKey:AWS_ACCESSKEY secretKey:AWS_SECRETKEY];
    AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWS_REGION credentialsProvider:credentialsProvider];
    [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;

    // Create SNS Client
    //AWSSNS *sns = [[AWSSNS new] initWithConfiguration:configuration];
    AWSSNS *sns = [AWSSNS defaultSNS];

    // Create an Application Endpoint
    AWSSNSCreatePlatformEndpointInput *request = [AWSSNSCreatePlatformEndpointInput new];
    request.token = deviceTokenString;
    request.platformApplicationArn = AWS_APP_ARN;
    request.customUserData = [NSString stringWithFormat:@"Operation:%@ Alias:%@ Name:%@ Model:%@ (%@:%@)",
                            [self getOperation], [self getNotifyAlias], [UIDevice currentDevice].name, [UIDevice currentDevice].model,
                            [UIDevice currentDevice].systemName, [UIDevice currentDevice].systemVersion] ;
    BFTask *task = [sns createPlatformEndpoint:request];
}

以下是任务描述:

  • task.result = (id) 0.0
  • task.error = (NSError *)零

下面是详细的日志记录输出:

代码语言:javascript
复制
2014-08-30 19:04:15.346 iFlightBag[4080:2492646] AWSiOSSDKv2 [Verbose] AWSURLRequestSerialization.m line:462 | -[AWSQueryStringRequestSerializer serializeRequest:headers:parameters:] | Request body: [Action=CreatePlatformEndpoint&Token=0b96783052a5114772ddc9154439849bbff9a6ba364cc3a69bf0524576a7697a&Version=2010-03-31&CustomUserData=Operation%3A%20Alias%3AAirCertChartersBI_%20Name%3ANikko%20Model%3AiPad%20%28iPhone%20OS%3A8.0%29&PlatformApplicationArn=arn%3Aaws%3Asns%3Aus-west-2%3A245211809793%3Aapp%2FAPNS_SANDBOX%2FLevelFlightMobile-Dev]
2014-08-30 19:04:15.364 iFlightBag[4080:2492646] AWSiOSSDKv2 [Debug] AWSSignature.m line:307 | -[AWSSignatureV4Signer signRequestV4:] | AWS4 Canonical Request: [POST
/

 content-type:application/x-www-form-urlencoded; charset=utf-8
 host:sns.us-west-2.amazonaws.com
 user-agent:aws-sdk-iOS/2.0.6 iPhone-OS/8.0 en_US
 x-amz-date:20140831T020415Z

 content-type;host;user-agent;x-amz-date
 76b8df9e95aaea3610c4a67073a0cbe48a941e41507cd55462f6bca2e47134b3]
2014-08-30 19:04:15.365 iFlightBag[4080:2492646] AWSiOSSDKv2 [Debug] AWSSignature.m line:308 | -[AWSSignatureV4Signer signRequestV4:] | payload Action=CreatePlatformEndpoint&Token=0b96783052a5114772ddc9154439849bbff9a6ba364cc3a69bf0524576a7697a&Version=2010-03-31&CustomUserData=Operation%3A%20Alias%3AAirCertChartersBI_%20Name%3ANikko%20Model%3AiPad%20%28iPhone%20OS%3A8.0%29&PlatformApplicationArn=arn%3Aaws%3Asns%3Aus-west-2%3A245211809793%3Aapp%2FAPNS_SANDBOX%2FLevelFlightMobile-Dev
2014-08-30 19:04:15.367 iFlightBag[4080:2492646] AWSiOSSDKv2 [Debug] AWSSignature.m line:324 | -[AWSSignatureV4Signer signRequestV4:] | AWS4 String to Sign: [AWS4-HMAC-SHA256
 20140831T020415Z
 20140831/us-west-2/sns/aws4_request
 e60736ba7af965e80d99ccf2cab6298ffddb79de719f317901a0c29ed5cd33c8]

没有错误返回,我不知道出了什么错.想法?

**更新以使用异步完成块**

代码语言:javascript
复制
    // Async call to create the platform endpoint
    [[[sns createPlatformEndpoint:request] continueWithSuccessBlock:^id(BFTask *task) {
        // success
        [self awsCreateTopicsAndSubscriptionsForEndpoint:task.result];
        return nil;
    }] continueWithBlock:^id(BFTask *task) {
        // failed
        if (task.error) {
            NSLog(@"Error: %@", task.error);
        }
        return nil;
    }];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-31 09:29:47

createPlatformEndpoint:是一种异步方法。为了检索continueWithBlock:task.error,需要对BFTask实例调用task.result。这个博客帖子应该可以帮助您理解如何使用BFTask。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25588412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档