当前位置: 首页 > 面试题库 >

获取电子邮件并命名Facebook SDK v4.4.0 Swift

邓韬
2023-03-14
问题内容

TL; TR:如何获取使用facebook SDK 4.4在我的应用程序上登录的用户的电子邮件和名称

到目前为止,我已经设法使登录工作,现在我可以从应用程序中的任何位置获取当前访问令牌。

我如何配置登录视图控制器和Facebook登录按钮:

class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {

    @IBOutlet weak var loginButton: FBSDKLoginButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        if(FBSDKAccessToken.currentAccessToken() == nil)
        {
            print("not logged in")
        }
        else{
            print("logged in already")
        }

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

    }

    //MARK -FB login
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        //logged in
        if(error == nil)
        {
            print("login complete")
            print(result.grantedPermissions)
        }
        else{
            print(error.localizedDescription)
        }

    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        //logout
        print("logout")
    }

现在在我的主视图中,我可以像这样获取访问令牌:

   let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken != nil) //should be != nil
    {
        print(accessToken.tokenString)
    }

我如何从登录的用户那里获得名称和电子邮件,使用较旧的SDK或使用Objective-C,我会看到许多问题和答案。


问题答案:

我已经fields在android中使用过,所以我想也可以在iOS中尝试它,并且可以使用。

let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
   req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
       if(error == nil) {
            print("result \(result)")
       } else {
            print("error \(error)")
       }
   }
)

结果将打印:

result {
   email = "email@example.com";
   id = 123456789;
   name = "Your Name";
}

发现这些字段等于User端点,请查看此链接,您可以在其中看到可以获取的所有字段。

Swift 4及更高版本的更新

let r = FBSDKGraphRequest(graphPath: "me",
                          parameters: ["fields": "email,name"],
                          tokenString: FBSDKAccessToken.current()?.tokenString,
                          version: nil,
                          httpMethod: "GET")

r?.start(completionHandler: { test, result, error in
    if error == nil {
        print(result)
    }
})

使用FBSDKLoginKit 6.5.0更新Swift 5

guard let accessToken = FBSDKLoginKit.AccessToken.current else { return }
let graphRequest = FBSDKLoginKit.GraphRequest(graphPath: "me",
                                              parameters: ["fields": "email, name"],
                                              tokenString: accessToken.tokenString,
                                              version: nil,
                                              httpMethod: .get)
graphRequest.start { (connection, result, error) -> Void in
    if error == nil {
        print("result \(result)")
    }
    else {
        print("error \(error)")
    }
}


 类似资料:
  • 我一直试图获取电子邮件正文与imap_fetchbody($stream,$msgno,$选项),但没有成功。 然后我尝试使用imap_fetchstructure($stream,$msgno),并使用各自的子类型手动解码每种类型,如:- 对于前两个,我可以用这样的东西来解码 但说到混合,我要么不知道,要么我该怎么办,要么我在哪里犯错。

  • 在上一章中,我们学习了如何查看电子邮件。 现在让我们看看如何获​​取每封电子邮件并阅读其内容。 让我们编写一个Java类FetchingEmail ,它将读取以下类型的电子邮件: 简单邮件 电子邮件附件 使用内联图片发送电子邮件 代码中遵循的基本步骤如下: 获取Session对象。 创建POP3商店对象并连接到商店。 创建文件夹对象并在邮箱中打开相应的文件夹。 检索邮件。 分别关闭文件夹和存储对象

  • 使用 Java 发送电子邮件,我如何让名称打印在电子邮件地址旁边,最好是这种样式? 我把我的电子邮件列表放在a *里了。包含如下数据的属性文件: 我正在使用此函数将属性文件中的每个电子邮件列表(如“email_list_3”)作为数组列表返回: private static ArrayList sete mail list(String email _ list _ name)抛出异常{ Prop

  • 我正在使用新的Google Drive Android API,我可以连接,并且可以做它允许我做的所有事情,但为了使用电子表格服务,我需要从登录用户中提取帐户名/电子邮件。 我该怎么做? 下面是我连接Google Drive API的代码。它工作得很好。 这里是我使用电子表格服务API的地方,但我需要帐户名来获取令牌。 我尝试过添加以下内容: ...在方法中,但它抛出了一个。 此外,以下是我的权限

  • 我正在尝试从GitHub获取一个用户的电子邮件地址,我只是在使用Postman测试过程。我有一个令牌,它有user和user:email作用域,点击https://api.github.com/user可以得到用户的信息。私人电子邮件在该endpoint不可见,所以我也点击https://api.github.com/user/emails。电子邮件endpoint给了我一个404。 与404一起

  • 我在我的系统中使用谷歌广告API PHP库。但是我没有在这里提供的API列表中找到以下2个APIhttps://developers.google.com/google-ads/api/docs/account-management/create-account: API,以查明用户是否已经存在使用电子邮件的谷歌广告帐户?如果找到,则返回其10位数的客户ID。 我在几个网站上见过同样的过程。每当用