2016-03-31 89 views
0

我有一個應用程序通過AWS Cognito使用Facebook提供程序成功登錄。在登錄身份後直接使用應用程序可以被檢索,並且一切似乎都很好。IdentityId無在iOS App中使用AWS Cognito和Facebook登錄

但是,經過一段時間(大約> 1小時)後,回到應用程序時,身份標識似乎沒有被填寫。奇怪的是,用戶名仍然填寫 - 只是不是ID。

let identity = self.getLoggedInIdentity() 
    let id = identity?.identityId  //this is nil 
    let username = identity?.userName //this still has a value 

    func getLoggedInIdentity() -> AWSIdentityManager? { 
     if userIsLoggedIn() { 
      return AWSIdentityManager.defaultIdentityManager() 
     } 

     return nil 
    } 

    func userIsLoggedIn() -> Bool { 
     let identityManager = AWSIdentityManager.defaultIdentityManager() 
     return identityManager.loggedIn 
    } 

我從AWS示例應用程序開始,包括AWS Mobile Hub自動生成的AWSMobileHubHelper框架。

我認爲,問題是,會議沒有被成功恢復爲完成塊中此功能重新推出的應用程序後,永遠不會觸發:在重新推出的應用

func didFinishLaunching(application: UIApplication, withOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 
    print("didFinishLaunching:") 

    if (!isInitialized) { 
     print("AWSIdentityManager Attempt Resume Session") 
     AWSIdentityManager.defaultIdentityManager().resumeSessionWithCompletionHandler({(result: AnyObject?, error: NSError?) -> Void in 
       print("AWSIdentityManager Resume Session Result: \(result) \n Error:\(error)") 
     }) 
     isInitialized = true 
    } 
    let didFinishLaunching: Bool = AWSIdentityManager.defaultIdentityManager().interceptApplication(application, didFinishLaunchingWithOptions: launchOptions) 

    return didFinishLaunching 
} 

我已經驗證函數被調用並且正在調用resumeSessionWithCompletionHandler,但完成處理程序永遠不會被觸發,並且我假定該會話未被成功恢復。

僅供參考這裏屬於初始登錄功能以及:

@IBAction func handleFacebookLogin(sender: AnyObject) { 
    self.handleLoginWithSignInProvider(AWSFacebookSignInProvider.sharedInstance()) 
} 

func handleLoginWithSignInProvider(signInProvider: AWSSignInProvider) { 
    AWSIdentityManager.defaultIdentityManager().loginWithSignInProvider(signInProvider, completionHandler: {(result: AnyObject?, error: NSError?) -> Void in 
     // If no error reported by SignInProvider, discard the sign-in view controller. 
     if error == nil { 
      dispatch_async(dispatch_get_main_queue(),{ 
       self.dismissViewControllerAnimated(true, completion: nil) 
      }) 
     } 
     print("result = \(result), error = \(error)") 
    }) 
} 

任何想法,爲什麼我能在最初登錄並連接到其他AWS服務,但不能夠在一段時間後恢復會話已經過去了?

+0

您可以分享' - getLoggedInIdentity'的實現和'identity'對象的定義嗎?你如何從SDK獲取Cognito IdentityId? –

+0

我修改了帖子以包含getLoggedInIdentity函數以及執行初始登錄的函數。標識對象是AWSIdentityManager類型的可選項,它是AWSMobileHubHelper框架中的包裝器對象。 – outerstorm

+0

' - userIsLoggedIn'的定義如何?我們需要查看整個登錄流程,以便我們可以嘗試重現您所看到的問題。 –

回答

0

我有同樣的問題。 我在AppDelegate上這樣修復。 你是否實現了這個代碼?

func application(application: UIApplication,openURL url: NSURL,sourceApplication: String?,annotation: AnyObject?) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
} 
相關問題