2016-01-02 2 views
1

У меня есть приложение для iPad и его используется в отеле для гостей. Таким образом, несколько пользователей используют приложение через Facebook, а после использования мне нужно выйти из приложения из приложения. Таким образом, у следующего пользователя снова появится экран входа в систему. Я делаю это в процессе выхода из системы, и когда я вызываю функцию входа в систему, она не дает экран входа в систему. Вместо этого он дает мне уже разрешенный экран. (С окном и кнопкой отмены). Пожалуйста, помогите решить эту проблему.Сильный логин в Facebook iOS SDK

Для входа в систему:

FBSDKLoginManager().logInWithReadPermissions(["email", "public_profile"], fromViewController: self, handler: { (result, error) -> Void in 
if error != nil { 
    print("error : \(error.localizedDescription)") 
} else if result.isCancelled { 
    print("user cancelled") 
} else { 
    print("success") 
} 
}) 

Для выхода:

FBSDKLoginManager().logOut() 
FBSDKAccessToken.setCurrentAccessToken(nil) 
FBSDKProfile.setCurrentProfile(nil) 

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
for cookie in storage.cookies! { 
    storage.deleteCookie(cookie) 
} 
NSUserDefaults.standardUserDefaults().synchronize() 
+0

Вы выходите из своего сеанса класса FBSDKLoginManager, но не выходите из браузера. –

+0

Использование устройства Логин: https://developers.facebook.com/docs/facebook-login/for-devices – WizKid

ответ

2

Это всегда даст вам уже утвержденный экран, потому что Facebook не несет ответственности за выход из браузера Safari.

Вы вышли из диспетчера входа, это нормально.

В этой ситуации вы можете использовать loginBehavior свойство FBSDKLoginManager

Вы должны установить поведение в Web будет открыть всплывающее для входа.

let fbManager : FBSDKLoginManager = FBSDKLoginManager() 
fbManager.loginBehavior = FBSDKLoginBehavior.Web 
fbManager.logInWithReadPermissions(["email"], fromViewController: self) { (result, error) -> Void in 
    if error != nil { 
     print(error) 
    } 
    else { 
     print(result) 
    } 
} 

enter image description here

Вы можете сделать выход из системы от менеджера в соответствии с вашими потребностями.

Надеюсь, это поможет вам.

+0

Спасибо. Это правильный способ сделать это. –

+0

@CharithNidarsha Добро пожаловать в любое время :) –

+0

Почему это правильный путь? – AlexB

0

очистить свой facebook маркер из КСН, как это ... делают пользователю войти в систему каждый раз, когда в приложении

ACAccountStore *store = [[ACAccountStore alloc] init]; 
     NSArray *fbAccounts = [store accountsWithAccountType:[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]]; 
     for (ACAccount *fb in fbAccounts) { 
      [store renewCredentialsForAccount:fb completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { 

      }]; 
     } 
0

wo rking, используя свой собственный класс кнопок FBSDKLoginButton на представлении. Вы должны ввести только защищенную страницу в представлении, если currentAccessToken не равен нулю. Это предотвратит показ первого вида на несколько миллисекунд. Как вы можете видеть, я включил мой viewControllers в NaviguationController.

UIView с пользовательского класса в окне входа в систему:

enter image description here

ViewWillAppear:

override func viewWillAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    if (FBSDKAccessToken.currentAccessToken() != nil) { 
     loginFacebook(FBSDKAccessToken.currentAccessToken().tokenString, 
      userId: FBSDKAccessToken.currentAccessToken().userID) 
     self.enterProtectedPage(); 
    } 
} 

ViewDidLoad:

override func viewDidLoad() { 
     super.viewDidLoad() 
     loginBtn.delegate = self 
     loginBtn.readPermissions = ["public_profile", "email", "user_birthday", "user_relationship_details"]; 
} 

Войти нажатие кнопки Действие:

func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) { 
    if (error != nil) { 
     print(error.localizedDescription) 
     return 
    } 

    if let _ = result.token { 
     loginFacebook(FBSDKAccessToken.currentAccessToken().tokenString, 
     userId: FBSDKAccessToken.currentAccessToken().userID) 
     self.enterProtectedPage(); 
    } 
} 

вводите защищенные страницы:

func enterProtectedPage() { 
    let protectedPage = self.storyboard?.instantiateViewControllerWithIdentifier("ProtectedPageViewController") as! 
     ProtectedPageViewController 
     let protectedPageNav = UINavigationController(rootViewController: protectedPage) 
     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     appDelegate.window?.rootViewController = protectedPageNav 
} 

выход из системы действия на защищенной странице:

@IBAction func btnLogoutClicked(sender: AnyObject) { 
     let loginManager = FBSDKLoginManager() 
     loginManager.logOut() 
     let loginPage = self.storyboard?.instantiateViewControllerWithIdentifier("ViewController") as!ViewController 
     let loginPageNav = UINavigationController(rootViewController: loginPage) 
     let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
     appDelegate.window?.rootViewController = loginPageNav 
} 
0

Это работает для меня Для Objective-C

первый Определить

@property(nonatomic,strong)FBSDKLoginManager *login; 

Затем используйте этот метод.

-(void)logoutFromFacebook{ 

    if(self.login){ 

     [self.login logOut]; 
    }else{ 
     self.login = [[FBSDKLoginManager alloc] init]; 
     [self.login logOut]; 
    } 

} 

Для Swift

var login: FBSDKLoginManager? 

func FBSDKLoginManager() { 
    if self.login != nil { 
    self.login.logout() 
    }else { 
    self.login = self.login() 
    self.login.logout() 
    } 
} 

Надеется, что это поможет.