在 iOS 中单击注销时发生 Facebook 登录?

Posted

技术标签:

【中文标题】在 iOS 中单击注销时发生 Facebook 登录?【英文标题】:Facebook login happening when clicking Logout in iOS? 【发布时间】:2015-07-05 14:43:23 【问题描述】:

我有一个 viewController,它显示了一个 FB 按钮,用于注册并将用户带到下一个 viewController。

我在 info.plist 中进行了更改

AppDelegate.m

#import "AppDelegate.h"
#import <Parse/Parse.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#import <ParseFacebookUtilsV4/PFFacebookUtils.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    // Override point for customization after application launch.

    // Initialize Parse.
    [Parse setApplicationId:@"PARSE_APP_ID"
                  clientKey:@"PARSE_CLIENT_KEY"];

    [PFFacebookUtils initializeFacebookWithApplicationLaunchOptions:launchOptions];
    [FBSDKLoginButton class];

    // [Optional] Track statistics around application opens.
    [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];

    // return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

    return YES;


- (void)applicationDidBecomeActive:(UIApplication *)application 
    [FBSDKAppEvents activateApp];


- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation 
    return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation];

故事板

添加 UIButton 并将类更改为 FBSDKLoginButton 将此 UIButton 中的 Segue 添加到下一个 ViewController 并将其命名为 FBSegue 从此 UIButton 添加 IBAction 并将其称为 fbLoginAction

loginViewController.m

#import "LoginViewController.h"
#import <Parse/Parse.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
#import <ParseFacebookUtilsV4/PFFacebookUtils.h>

- (IBAction)fbLoginAction:(id)sender 
        [self fbLogin];


- (void)fbLogin 
    NSArray *permissions = @[@"public_profile", @"email"];
    [PFFacebookUtils logInInBackgroundWithReadPermissions:permissions block:^(PFUser *user, NSError *error) 
        if (!user) 
            NSLog(@"Uh oh. The user cancelled the Facebook login.");
         else if (user.isNew) 
            NSLog(@"User signed up and logged in through Facebook!");
            [self performSegueWithIdentifier:@"FBSegue" sender: self];
         else 
            NSLog(@"User logged in through Facebook!");
            [self performSegueWithIdentifier:@"FBSegue" sender: self];
        
    ];

问题

当我点击 ios 模拟器上的 Login With Facebook 按钮时,我得到 Safari 页面来授权应用程序。当我这样做时,我仍然看到 loginViewController 的 facebook 按钮更改为 Logout

当我点击 Logout 按钮时,我被带到 Safari 上的 facebook,并显示我已经授权该应用程序的消息,然后我被带回我的应用程序。底部有注销和取消选项,但单击其中一个,我将被带到下一个视图控制器。

请指导一下?我知道,由于我没有在 viewDidLoad 方法下做任何事情,所以当应用启动时,我的用户将不会登录并转到下一个 View Controller。

【问题讨论】:

您使用的 facebook 登录不正确。根据您提供的信息,您有一个用于 fblogin 和注销的按钮?这是正确的吗?您还要更改 FBSDKLoginButton 的类吗?请确认 我的 loginViewController 中有一个 UIButton 用于 Facebook 集成。它在应用启动时显示 Login with Facebook,然后在用户提供 Facebook 登录凭据时更改为 Logout。我没有更改 FBSDKLoginButton 的类,我将 UIButton 的类更改为 FBSDKLoginButton。 【参考方案1】:

我认为您以错误的方式使用 FBSDKLoginButton。

来自https://developers.facebook.com/docs/reference/ios/current/class/FBSDKLoginButton/ 上的文档

FBSDKLoginButton 与 [FBSDKAccessToken currentAccessToken] 一起使用 确定要显示的内容,并自动启动身份验证 点击时(即,您不需要手动订阅操作 目标)。

因此,您不必使用 IBAction,您可以使用 UIView 而不是 UIButton 来实现 FBSDKLoginButton

【讨论】:

以上是关于在 iOS 中单击注销时发生 Facebook 登录?的主要内容,如果未能解决你的问题,请参考以下文章

facebook 无法在 ios 应用程序中正确注销。无法切换用户

使用 facebook SDK for ios 6 实现 Facebook 注销

Facebook SDK 注销问题

Facebook 在收到请求错误时注销

为 Facebook 页面生成“永不过期”访问令牌

如何使用 Facebook SDK 在我的应用程序中注销 Facebook