首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Swift iOS应用程序通过Cognito生成亚马逊网络服务信誉

使用Swift iOS应用程序通过Cognito生成亚马逊网络服务信誉
EN

Stack Overflow用户
提问于 2015-03-26 03:53:49
回答 2查看 1.5K关注 0票数 1

尝试效仿amazon-cognito网站上设置的示例,从iOS上的facebook登录获取AWS凭据。我正在尝试将目标C转换为swift,并且在设置凭据提供程序的登录时遇到问题。

(http://docs.aws.amazon.com/mobile/sdkforios/developerguide/cognito-auth.html)在“使用Facebook”下

在我的viewController中,我尝试了:

代码语言:javascript
复制
    let token = FBSession.activeSession().accessTokenData.accessToken

    let credentialsProvider : AWSCredentialsProvider = AWSServiceManager.defaultServiceManager().defaultServiceConfiguration.credentialsProvider

    credentialsProvider.logins = NSDictionary(dictionary: [AWSCognitoLoginProviderKey.Facebook: token])

但是在第三行,xCode声明AWSCredentialsProvider没有"logins“字段,尽管教程让它看起来像是这样。

谢谢你的帮忙!我假设我错误地抓取了credentialsProvider。

EN

回答 2

Stack Overflow用户

发布于 2015-03-26 14:00:05

AWSCredentialsProvider协议没有定义login属性。您需要将凭据提供程序强制转换为AWSCognitoCredentialsProvider才能访问它。另一种选择是保留对AWSCognitoCredentialsProvider实例的引用,以便您自己更新属性。

票数 1
EN

Stack Overflow用户

发布于 2017-01-23 02:34:01

我认为实现这一点的方法是编写一个自定义的提供者:一个实现AWSIdentityProviderManager协议的类:http://docs.aws.amazon.com/AWSiOSSDK/latest/Protocols/AWSIdentityProviderManager.html

这个协议基本上只有一个方法,即"logins“,您可以使用它来返回凭证的NSDictionary。因此,不使用这一行代码:

代码语言:javascript
复制
let credentialsProvider : AWSCredentialsProvider = AWSServiceManager.defaultServiceManager().defaultServiceConfiguration.credentialsProvider

您将设计一个自定义类(其中大部分内容直接来自AWS文档):

代码语言:javascript
复制
class MyIdentityProvider: NSObject, AWSIdentityProviderManager {

func logins() -> AWSTask<NSDictionary> {
  if let token = FBSDKAccessToken.current() {
    return AWSTask(result: [AWSIdentityProviderFacebook:token])
  }  
  return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
}

然后使用您的自定义类实例化AWSService管理器:

代码语言:javascript
复制
let identityProvider = MyIdentityProvider()
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .usEast1,
     identityPoolId: "<your poolId>",
     identityProviderManager: identityProvider)
let configuration = AWSServiceConfiguration(region:.usEast1, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration

请看这个SO答案中的示例(对一个相关问题):[iOS][AWS Cognito] 'logins' is deprecated: Use "AWSIdentityProviderManager"

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

https://stackoverflow.com/questions/29265270

复制
相关文章

相似问题

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