首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

登录Facebook获取用户电子邮件ID swift 3时获取空值

在Swift 3中,要登录Facebook并获取用户的电子邮件地址,你需要使用Facebook SDK。以下是详细的步骤和代码示例,帮助你解决获取空值的问题。

步骤 1: 安装Facebook SDK

首先,确保你已经在项目中安装了Facebook SDK。你可以使用CocoaPods来安装:

代码语言:javascript
复制
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'

然后在终端运行:

代码语言:javascript
复制
pod install

步骤 2: 配置Info.plist

在项目的Info.plist文件中添加以下内容:

代码语言:javascript
复制
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fbYOUR_APP_ID</string>
        </array>
    </dict>
</array>
<key>FacebookAppID</key>
<string>YOUR_APP_ID</string>
<key>FacebookDisplayName</key>
<string>YOUR_APP_NAME</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>

确保将YOUR_APP_IDYOUR_APP_NAME替换为你的Facebook应用的ID和名称。

步骤 3: 初始化Facebook SDK

在你的AppDelegate.swift文件中初始化Facebook SDK:

代码语言:javascript
复制
import FBSDKCoreKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
    return true
}

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return ApplicationDelegate.shared.application(app, open: url, options: options)
}

步骤 4: 实现登录和获取用户信息

在你的ViewController中实现登录和获取用户信息:

代码语言:javascript
复制
import UIKit
import FBSDKLoginKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func loginButtonTapped(_ sender: UIButton) {
        let loginManager = LoginManager()
        loginManager.logIn(permissions: ["public_profile", "email"], viewController: self) { loginResult in
            switch loginResult {
            case .success(let grantedPermissions, _, _):
                if grantedPermissions.contains("email") {
                    self.getUserProfile()
                }
            case .cancelled:
                print("User cancelled login.")
            case .failed(let error):
                print("Login failed with error: \(error.localizedDescription)")
            }
        }
    }

    func getUserProfile() {
        if let accessToken = AccessToken.current {
            GraphRequest(graphPath: "me", parameters: ["fields": "email"]).start { connection, result, error in
                if let error = error {
                    print("Failed to get user profile: \(error.localizedDescription)")
                    return
                }
                
                guard let userData = result as? [String: Any], let email = userData["email"] as? String else {
                    print("Email is nil")
                    return
                }
                
                print("User email: \(email)")
            }
        }
    }
}

常见问题和解决方法

  1. 权限未授予:确保用户已经授予了email权限。你可以在Facebook开发者控制台中检查应用的权限设置。
  2. 隐私设置:有些用户可能在Facebook的隐私设置中禁止了应用访问他们的电子邮件地址。
  3. 异步问题:确保在获取用户信息时处理好异步操作,避免在数据还未返回时就尝试访问。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 单点登录SSO的身份账户不一致漏洞

    由于良好的可用性和安全性,单点登录 (SSO) 已被广泛用于在线身份验证。但是,它也引入了单点故障,因为所有服务提供商都完全信任由 SSO 身份提供商创建的用户的身份。在本文中调查了身份帐户不一致威胁,这是一种新的 SSO 漏洞,可导致在线帐户遭到入侵。该漏洞的存在是因为当前的 SSO 系统高度依赖用户的电子邮件地址来绑定具有真实身份的帐户,而忽略了电子邮件地址可能被其他用户重复使用的事实在 SSO 身份验证下,这种不一致允许控制重复使用的电子邮件地址的攻击者在不知道任何凭据(如密码)的情况下接管关联的在线帐户。具体来说,首先对多个云电子邮件提供商的帐户管理策略进行了测量研究,展示了获取以前使用过的电子邮件帐户的可行性。进一步对 100 个使用 Google 商业电子邮件服务和自己的域地址的流行网站进行了系统研究,并证明大多数在线帐户都可以通过利用这种不一致漏洞而受到损害。为了阐明电子邮件在野外重复使用,分析了导致广泛存在的潜在电子邮件地址冲突的常用命名约定,并对美国大学的帐户政策进行了案例研究。最后,为终端用户、服务提供商和身份提供商提出了一些有用的做法,以防止这种身份帐户不一致的威胁。

    03

    谷歌分析告诉你的8个数据谎言及修复方法

    使用谷歌分析是营销人员必须要做的,因为它可以高效衡量结果。真的是这样吗? 数据是有价值的,而谷歌分析可以快速简单地获取数据。你当然需要谷歌分析来衡量结果。这是必经之路。 但是,你知道这个平台可以欺骗你,并且你永远都不会知道吗?这意味着你得到的数据可能完全是错的。当数据出错时,是没有办法依靠错误的数据做出未来的营销决策的。 如果依靠这些数据做了营销决策,你将可能犯下代价高昂且无法弥补的错误。受污染的数据是不能被信任的。一旦数据错误把数据弄乱了,就很难让事情回到正轨,即使再优秀的数据分析团队也无法挽回。 幸运的

    04

    超详细!一步一步教会你如何使用Java构建单点登录

    在开发应用程序时,通常只有一台资源服务器为多个客户端应用程序提供数据。尽管这些应用程序可能具有相似的用户,但它们可能具有执行所需的不同权限。设想一种情况,其中第一个应用程序的一部分用户应有权访问第二个应用程序(以管理控制台应用程序与客户端或用户应用程序相对应);您将如何执行此操作?在本文中,我将向您展示如何使用Okta和Spring Boot通过两个客户端应用程序和一个资源服务器来实现单点登录。我还将讨论如何使用访问策略来强制执行身份验证和授权策略,以及如何基于应用程序范围来限制对资源服务器的访问。在进入代码之前,您需要适当的用户身份验证配置。今天,您将使用Okta作为OAuth 2.0和OpenID Connect(OIDC)提供程序。这将使您能够管理用户和组,并轻松启用诸如社交和多因素日志身份验证之类的选项。首先,您需要先注册并创建一个免费的Okta开发人员帐户(如果尚未注册)。您会收到一封电子邮件,其中包含有关如何完成帐户设置的说明。完成此操作后,导航回到您的Okta帐户以设置Web应用程序,用户,资源服务器和授权服务器。首次登录时,可能需要单击黄色的管理按钮才能访问开发人员的控制台。创建两个OpenID Connect应用程序第一步是创建两个OIDC应用程序。OpenID Connect是建立在OAuth 2.0之上的身份验证协议,它是一种授权协议。每个OIDC应用程序都为每个Web应用程序实例定义一个身份验证提供程序终结点。在Okta开发人员控制台中,导航到应用程序,然后单击添加应用程序。选择Web,然后单击Next。使用以下值填充字段:

    03
    领券