Facebook iOS SDK中的强制登录
我有一个iPad应用程序,它在一家酒店里为客人使用。因此,多个用户通过Facebook登录使用该应用程序,使用后,我需要将该用户从该应用程序中注销。因此,下一个用户将再次进入登录屏幕。我在注销过程中这样做,当我调用login函数时,它不会给出登录屏幕。相反,它给了我已经授权的屏幕。(使用“确定”和“取消”按钮)。请帮助解决此问题 登录:Facebook iOS SDK中的强制登录,ios,swift,facebook,Ios,Swift,Facebook,我有一个iPad应用程序,它在一家酒店里为客人使用。因此,多个用户通过Facebook登录使用该应用程序,使用后,我需要将该用户从该应用程序中注销。因此,下一个用户将再次进入登录屏幕。我在注销过程中这样做,当我调用login函数时,它不会给出登录屏幕。相反,它给了我已经授权的屏幕。(使用“确定”和“取消”按钮)。请帮助解决此问题 登录: FBSDKLoginManager().logInWithReadPermissions(["email", "public_profile"], fromVi
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()
注销:
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()
像这样从ios上清除你的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) {
}];
}
下面是一个在视图上使用自定义按钮类FBSDKLoginButton的工作解决方案。如果currentAccessToken不是nil,则只应在视图中输入受保护的页面。这将阻止在几毫秒内显示第一个视图。如您所见,我将ViewController嵌入到NaviguationController中 在登录视图中具有自定义类的UIView: 视图将显示:
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
}
受保护页面上的注销操作:
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
}
这对我有用
对于目标-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()
}
}
希望这会有所帮助 它将始终为您提供一个已经授权的屏幕,因为Facebook不负责从Safari浏览器注销
您已从登录管理器注销,一切正常
对于这种情况,您可以使用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)
}
}
您可以根据需要从经理处注销
希望它能对您有所帮助。您可以注销您的FBSDKLoginManager类会话,但不能在浏览器中注销。使用设备登录:@CharithNidarsha Welcome anytime:)这种方式有效。一旦用户尝试重新登录,它会显示“已授权…”,但当您按OK时,它会自动关闭,结果不会被取消。我只是希望用户不必登录。。