Facebook SDKを使用してiosアプリケーションを開発してログインしています。 ストーリーボードの最初のView ControllerとしてLogInViewController
を設定しました。そこからFBアカウントを使用してログインします。FBSDKAccessToken currentAccessTokenアプリケーション終了後にnil
私は、ユーザーがあるので、私はcurrentAccessToken
をチェックしていますし、それがnilでない場合は、私が直接、第二のViewControllerをロードしていますAppDelegateファイルでは。
にユーザーがログイン後に正しくセットされている別のViewControllerを持っていますすでにログインしています。
しかし、currentAccessToken
は、アプリを終了して再起動すると、常にnilになります。それは私がホームボタンを押して、それがバックグラウンドでまだ動いている間にアプリケーションを再開した場合にのみ機能します。ここで
は、コード内の詳細は以下のとおりです。
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.customNavigationBar()
if (!isIcloudAvailable()) {
self.displayAlertWithTitle("iCloud", message: "iCloud is not available." +
" Please sign into your iCloud account and restart this app")
return true
}
if (FBSDKAccessToken.currentAccessToken() != nil) {
self.instantiateViewController("MapViewController", storyboardIdentifier: "Main")
}
return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
func applicationWillResignActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
LogInViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
// Listen to the Facebook notification and when received, execute func handleFBSessionStateChangeWithNotification
NSNotificationCenter.defaultCenter().addObserver(self, selector:"handleFBSessionStateChangeWithNotification:", name: "SessionStateChangeNotification", object: nil)
}
func handleFBSessionStateChangeWithNotification(notification: NSNotification) {
// Switch to MapViewController when logged in
if ((FBSDKAccessToken.currentAccessToken()) != nil) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let mapViewController = storyboard.instantiateViewControllerWithIdentifier("MapViewController") as! MapViewController
self.presentViewController(mapViewController, animated: false, completion: nil)
}
}
それが関連しているかどうかは知りません、しかし、私はまた、MapViewController
のための警告を得ているので、segue put tストーリーボードからの授与:
警告:ビューが ウィンドウ階層内にないMapViewControllerを表示しようとしました!
FBAccessToken.currentAccessTokenには時間がかかります。 sessionStateChangedNotificationを使用してそれが利用可能になるのを待つ必要があります(既に行っているように)。 – ZeMoon
ありがとうございます。どのくらいの時間が必要ですか?これは、ユーザーがかなり速くアプリケーションを終了すると、彼は再ログインする必要があることを意味しますか?以前のFBSDKのバージョンでは、キャッシュされたアクセストークンのチェックが行われていましたが、これはどのように行うべきかわかりません。 –
私はLoginViewControllerのviewDidAppearにsessionsStateChangedNotificationを入れようとしましたが、何も変わりませんでした。 –