2016-10-01 14 views
0

私はCognitoのログインプロセスにFacebookを使用したいと思っています。私はたくさんのAWSドキュメントを読んで、チュートリアルや質問をStackoverflowで見てきましたが、私の問題。Swift - AWS Cognito -Face Login

ユーザーがアプリケーションを開くと、ユーザーがIdentityManagerを使用してログインしているかどうかを確認します。そうでない場合は、Facebook SDKを使用してFacebookを使用してサインインできる新しいビューが開きます。その後、ドキュメンテーションに(IdentityProvider.loginsは推奨されていません)、カスタムIdentityProviderでトークンを保存しました。すべて正常に動作するようですが、アプリケーションを再起動するたびにセッションが復元されません。

AWSIdentityManager.defaultIdentityManager().resumeSessionWithCompletionHandler(handler)私は自分のセッションを復元しましたが、ユーザーがログインしていない場合は、私のカスタムログイン画面が期待通りに表示されず、Safari WebビューがFacebookに表示されることがわかりました。ここで

は私のコードは次のとおりです。

AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let identityManager = AWSIdentityManager.defaultIdentityManager() 

    identityManager.resumeSessionWithCompletionHandler({ 
     (result, error) -> Void in 

     if !identityManager.loggedIn { 
      let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
      let initialViewControlleripad : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("SignIn") as UIViewController 
      self.window = UIWindow(frame: UIScreen.mainScreen().bounds) 
      self.window?.rootViewController = initialViewControlleripad 
      self.window?.makeKeyAndVisible() 
     } 
    }) 

    return AWSMobileClient.sharedInstance.didFinishLaunching(application, withOptions: launchOptions) 
} 

SignInViewController.swift

@IBAction func openFacebookLoginScreen(sender: AnyObject) { 
    FBSDKLoginManager().logInWithReadPermissions(FACEBOOK_PERMISSIONS, fromViewController: self, handler: { (result, error) -> Void in 

     if error == nil { 
      let fbLoginResult : FBSDKLoginManagerLoginResult = result 

      if fbLoginResult.isCancelled { 
       print("Cancelled") 
      } 
      else { 
       if FBSDKAccessToken.currentAccessToken() != nil { 
        self.signInFacebook(FBSDKAccessToken.currentAccessToken().tokenString) 
        self.dismissSignInView() 
       } 
      } 
     } 
    }) 
} 

func signInFacebook(fbToken: String){ 

    let logins = [AWSIdentityProviderFacebook : fbToken] 

    let customProviderManager = CustomIdentityProvider(tokens: logins) 

    let credentialsProvider = AWSCognitoCredentialsProvider(
     regionType:.USEast1, 
     identityPoolId: COGNITO_IDENTITY_POOL_ID, 
     identityProviderManager: customProviderManager) 

    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider: credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 
} 

class CustomIdentityProvider: NSObject, AWSIdentityProviderManager { 
    var tokens : [NSString : NSString]? 

    init(tokens: [NSString : NSString]) { 
     self.tokens = tokens 
    } 

    @objc func logins() -> AWSTask { 
     return AWSTask(result: tokens) 
    } 
} 

答えて

1

どうやら私の問題は、私はAppDelegate内IdentityManager.loggedInを呼んでいたということでした.swift、私はそれを私のメインビューでviewDidLoad()に移動するontroller。

@IBAction func openFacebookLoginScreen(_: AnyObject) { 
    handleLoginWithSignInProvider(AWSFacebookSignInProvider.sharedInstance()) 
} 

func handleLoginWithSignInProvider(signProvider: AWSSignInProvider){ 
    AWSIdentityManager.defaultIdentityManager().loginWithSignInProvider(signProvider) { (result, error) in 
     if(error == nil){ 
      let logins = [AWSIdentityProviderFacebook : FBSDKAccessToken.currentAccessToken().tokenString!] 

      let customProviderManager = CustomIdentityProvider(tokens: logins) 

      let credentialsProvider = AWSCognitoCredentialsProvider(
       regionType:.USEast1, 
       identityPoolId: self.COGNITO_IDENTITY_POOL_ID, 
       identityProviderManager: customProviderManager) 

      let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider: credentialsProvider) 
      AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

      self.dismissSignInView() 
     } 
    } 
} 

はまた、私はにコードで私の記号を変更しました

関連する問題