我会建议对以下是上述建议的推动模式并切换到拉范例。 AWSIdentityProviderManager的用途是仅在SDK需要时才提示您输入令牌,而不是让您在SDK的外部定期进行设置,以确定SDK是否需要它。这样,您不必自己管理令牌过期,只需确保您的令牌在调用登录名时有效,如果不是,则可以使用AWSCompletionSource获取新令牌。
假设你已经整合Facebook登录,您的IdentityProviderManager应该是这个样子:
import Foundation
import AWSCore
import FacebookLogin
import FacebookCore
class FacebookProvider: NSObject, AWSIdentityProviderManager {
func logins() -> AWSTask<NSDictionary> {
if let token = AccessToken.current?.authenticationToken {
return AWSTask(result: [AWSIdentityProviderFacebook:token])
}
return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
}
}
要使用它:
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.YOUR_REGION, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager: FacebookProvider())
let configuration = AWSServiceConfiguration(region: AWSRegionType.usEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
再进行试验,获得证书:
AWSServiceManager.default().defaultServiceConfiguration.credentialsProvider.credentials().continue(with: AWSExecutor.default(), with: { (task) -> Any? in
print(task.result ?? "nil")
return task
})
顺便说一句,我需要将此添加到我的应用程序委托来让Facebook登录工作w斯威夫特这里没有提到https://developers.facebook.com/docs/swift/login:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}