取消 Facebook 登录不显示 (Swift)

Posted

技术标签:

【中文标题】取消 Facebook 登录不显示 (Swift)【英文标题】:Cancel Facebook login not displayed (Swift) 【发布时间】:2015-03-23 04:58:30 【问题描述】:

我在我的游戏中加入了登录 Facebook 的选项,它运行良好,如下所示。但是,如果用户不想登录或创建新的 Facebook 帐户而只是想在 Facebook 上免费玩游戏,他们怎么能取消呢?

如果我点击上面的按钮,我会看到一个屏幕,要求我登录或创建一个新帐户。那里也没有取消的选项。

我在这个问题上找到了this answer,但作为一个直接开始使用 Swift 的新手,我不知道如何将答案移植到那里。

我将按钮加载到我的 GameViewController.swift 文件中,就像这样

override func viewDidLoad() 
        super.viewDidLoad()
        self.authenticateLocalPlayer()
        self.fbLoginView.delegate = self
        self.fbLoginView.readPermissions = ["public_profile", "email", "user_friends"]

并且在我的 AppDelegate.swift 文件中有以下函数

class AppDelegate: UIResponder, UIApplicationDelegate 
    var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
        // Override point for customization after application launch.
        FBLoginView.self
        FBProfilePictureView.self
        return true
    

    func application(application: UIApplication, openURL url: NSURL, sourceApplication: NSString?, annotation: AnyObject) -> Bool 
        var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)
        return wasHandled
    

我应该在这里调整一些东西吗?什么?

【问题讨论】:

他们无法取消,他们需要注销。 如果他们没有 Facebook 帐户,他们如何退出? 【参考方案1】:

这个帖子帮了我Swift Facebook Login

我将这里提到的这部分代码添加到我的 GameViewController.swift 文件中

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
// Whenever a person opens the app, check for a cached session
    if FBSession.activeSession().state == FBSessionState.CreatedTokenLoaded 
        // If there's one, just open the session silently, without showing the user the login UI
        FBSession.openActiveSessionWithReadPermissions(["public_profile"], allowLoginUI: false, completionHandler: 
            (session, state, error) -> Void in
            self.sessionStateChanged(session, state: state, error: error)
        )
    
    return true


func sessionStateChanged(session : FBSession, state : FBSessionState, error : NSError?) 
// If the session was opened successfully
    if  state == FBSessionState.Open 
    println("Session Opened")
    
// If the session closed
    if state == FBSessionState.Closed 
    println("Closed")
    

与我之前的按钮不同,此代码显示了带有取消按钮的 Facebook 登录视图。

然后我像这样编辑了我的 handleError 委托函数

func loginView(loginView : FBLoginView!, handleError:NSError) 
    println("Error: \(handleError.localizedDescription)")
    loginView.removeFromSuperview()

所以现在,当用户点击取消键时,整个 Facebook 登录操作都会消失。

【讨论】:

以上是关于取消 Facebook 登录不显示 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章

如果用户取消登录,Swift ios facebook登录会使应用程序崩溃

Facebook Login 中的取消按钮使用 Swift 崩溃了吗?

取消 Google Play 游戏登录后 Facebook 登录崩溃(反之亦然)

使用 Facebook 应用程序时 Facebook 登录回调不起作用 - Swift

迁移到 Swift 3 时,Facebook 登录不会返回应用程序

使用 URL 显示 Facebook 用户图片 (Swift 5 | Xcode 10)