ios - FBSDKLoginManager 未在 native ios 应用程序中打开登录对话框

标签 ios facebook

我是 iPhone 开发新手,我想使用最新的 facebook sdk 4 从我的 native iOS 简单应用程序进行 facebook 登录。一些东西,我只想从自定义 UIButton 打开一个 facebook 登录对话框单击,在我的应用程序中,为此我在按钮单击方法中执行以下代码..

- (IBAction)didTapLoginFaceBook:(id)sender {

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
        if (error) {
            // Process error

        NSLog(@"Unexpected login error: %@", error);
        NSString *alertMessage = error.userInfo[FBSDKErrorLocalizedDescriptionKey] ?: @"There was a problem logging in. Please try again later.";
        NSString *alertTitle = error.userInfo[FBSDKErrorLocalizedTitleKey] ?: @"Oops";
        [[[UIAlertView alloc] initWithTitle:alertTitle
                                        message:alertMessage
                                       delegate:nil
                              cancelButtonTitle:@"OK"
                              otherButtonTitles:nil] show];


        } else if (result.isCancelled) {
            // Handle cancellations
        } else {
            // If you ask for multiple permissions at once, you
            // should check if specific permissions missing
            if ([result.grantedPermissions containsObject:@"email"]) {
                // Do work
            }
        }
    }];


}

此代码的工作方式有所不同,但我想从自定义 UIButton 单击 native iOS 应用程序中打开一个登录对话框。

所以,请用一些代码建议正确的方法,提前致谢

最佳答案

Facebook 登录 4.x,使用 Objective-C 中的自定义按钮

- (IBAction)btnFacebookPressed:(id)sender {
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    login.loginBehavior = FBSDKLoginBehaviorBrowser;
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
     {
         if (error)
         {
             // Process error
         }
         else if (result.isCancelled)
         {
             // Handle cancellations
         }
         else
         {
             if ([result.grantedPermissions containsObject:@"email"])
             {
                 NSLog(@"result is:%@",result);
                 [self fetchUserInfo];
                 [login logOut];
             }
         }
     }];
}

- (void)fetchUserInfo {
    if ([FBSDKAccessToken currentAccessToken])
    {
        NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location , friends ,hometown , friendlists"}]
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
             if (!error)
             {
                 NSLog(@"resultis:%@",result);

             }
             else
             {
                 NSLog(@"Error %@",error);
             }
         }];
    }
}

Facebook 登录 4.x,使用 Swift 中的自定义按钮

@IBAction func btnFacebookPressed(_ sender: Any) {

    let loginManager = FBSDKLoginManager()
    loginManager.loginBehavior = FBSDKLoginBehavior.browser;

    loginManager.logIn(withReadPermissions: ["email"], from: self, handler: {(result : FBSDKLoginManagerLoginResult?, error : Error?) -> Void in
        if error != nil {
            // Process error
        }
        else if (result?.isCancelled)! {
            // Handle cancellations
        }
        else if (result?.grantedPermissions.contains("email"))! {
            print("result is: \(result)");
            self.fetchUserInfo()
            loginManager.logOut()
        }
    })
}


func fetchUserInfo() {
    if let accessToken = FBSDKAccessToken.current()?.tokenString {
        print("Token is available : \(accessToken)")

        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location , friends ,hometown , friendlists"]).start(completionHandler: { (connection : FBSDKGraphRequestConnection?, result : Any?, error : Error?) in

            if let error = error {
                print("Error \(error)")
            }
            else if let result  = result {
                print("result:\(result)")
            }
        })
    }
}

关于ios - FBSDKLoginManager 未在 native ios 应用程序中打开登录对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30771501/

相关文章:

ios - applicationDidEnterBackground 时,performSelector afterDelay 调用是否会重置?

iphone - 如何使用 facebook ios sdk 发出好友请求?

在公共(public) CDN 上托管图片的 Facebook 帖子

ios - Facebook 登录失败,代码为 190 - "The access token was invalidated on the device"

android - 更新cordova后无法搭建ios/android平台

ios - UIUserInterfaceIdiomPad 将如何响应 iPad mini

iphone - UIView只接受特定区域的触摸

ios - 无法在 iOS 6 中保存 EKReminder

javascript - 我该如何解释 Facebook 登录审核被拒绝的情况?

java - Facebook open graph get 'me' 有效,但 'me?fields=name' 返回 oAuth 错误