gpt4 book ai didi

ios - 如何在适用于 iPhone 的 swift iOS 中使用 FBSDK 获取用户电子邮件地址?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:18:18 25 4
gpt4 key购买 nike

我是一名使用 swift 开发 iPhone 应用程序的自学新生。我正在使用 FBSDK 为 Facebook 身份验证设计一个登录页面。我已经成功实现了登录和注销的登录按钮。它返回用户名和 ID,但无法绘制用户电子邮件 ID 并显示代码 2500 错误。我也无法使用新用户登录。它会自动使用同一用户登录。

这里是错误:

UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
body = {
error = {
code = 2500;
"fbtrace_id" = BimF4Nuqx0v;
message = "An active access token must be used to query information about the current user.";
type = OAuthException;
};
};
code = 400;
}})
Successfully logged in with Facebook...
123
result Optional({
id = 120008981838163;
name = "Nisha Ios";
})
Did Logout of Facebook

这是我在 AppDelegate.swift 中的代码:

import UIKit
import CoreData
import FBSDKCoreKit


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, {

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.

FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

return true
}


func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {

var handled=FBSDKApplicationDelegate.sharedInstance().application(app, open: url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation])

return handled
}

func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
FBSDKAppEvents.activateApp()
}

这是我在 ViewController.swift 中的代码:

import UIKit
import FBSDKLoginKit
import FBSDKCoreKit


class ViewController: UIViewController, UITextFieldDelegate, FBSDKLoginButtonDelegate, {


@IBOutlet var emailField: UITextField!

@IBOutlet var passField: UITextField!

@IBOutlet var customButton: FBSDKLoginButton!


@IBOutlet var myView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

self.emailField.delegate = self;
self.passField.delegate = self;

customButton.readPermissions=["email","public_profile"]
customButton.delegate=self

customButton.addTarget(self, action: #selector(handleCustomFBLogin), for: UIControlEvents.touchUpInside)

func handleCustomFBLogin(){

// FBSDKLoginManager().logIn(withReadPermissions: ["email","public_profile"], from: self)
// { (result, error) -> Void in
// if error != nil {
// print("custom FB Login Failed",error)
// }
//}
self.showEmail()
print(123)
}


func showEmail()
{
FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "email, id, name"]).start {
(connection, result, err) in
if(err == nil)
{
print("result \(result)")
}
else
{
print("error \(err)")
}
}

}

public func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {

if error != nil
{
print(error)
return

}
else{
print("Successfully logged in with Facebook... ")

}
//showEmail()
}

func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!){

print("Did Logout of Facebook")

}

在 func handleCustomFBLogin() 中,我注释了一些代码。如果我取消对它们的注释,我将无法获取用户名或 ID,而只会收到代码 2500 错误。

有人可以告诉我我做错了什么吗?还帮我用新用户登录而不是用同一个用户自动登录?提前致谢:-)

最佳答案

我正在使用它并且它对我来说工作正常。请确保您用于登录的帐户公开了电子邮件和其他详细信息。您只能获取 Facebook 用户的公开详细信息。其次,您的 token 应该有效。

   func getFBUserData()
{

showIndicator()

if((FBSDKAccessToken.currentAccessToken()) != nil

{

FBSDKGraphRequest(graphPath: "me",

parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email , gender"]).startWithCompletionHandler(

{ (connection, result, error) -> Void in

self.hideIndicator()

if (error == nil)

{

self.objSocialInfo = SignupUserStructure()

self.objSocialInfo.Name = String(result.objectForKey("first_name")!) + " " + String(result.objectForKey("last_name")!)

self.objSocialInfo.Email = String(result.objectForKey("email")!)

self.objSocialInfo.ProfilePicUrl = (result.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as? String)!

self.objSocialInfo.SocialId = String(result.objectForKey("id")!)

self.objSocialInfo.Gender = String(result.objectForKey("gender")!)

}})
}
}

关于ios - 如何在适用于 iPhone 的 swift iOS 中使用 FBSDK 获取用户电子邮件地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42197610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com