Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何跳过Facebook';登录用户已登录Facebook的设备时的权限页_Ios_Facebook_Login - Fatal编程技术网

Ios 如何跳过Facebook';登录用户已登录Facebook的设备时的权限页

Ios 如何跳过Facebook';登录用户已登录Facebook的设备时的权限页,ios,facebook,login,Ios,Facebook,Login,我正在用Swift编写一个iOS8应用程序。我正在尝试使用Facebook登录,我正在使用Facebook iOS SDK 4.1。我没有使用Facebook按钮。我有自己的简单按钮。单击按钮,调用我编写并粘贴在下面的facebookLogin方法。我在已经登录Facebook的计算机上运行该应用程序。第一次运行时,它会请求权限,在我按OK后,它会登录,一切正常。在以后的运行中,当我仍然在同一台计算机上登录时,应用程序再次显示权限页面,这一次表示用户已经授权了应用程序,并给出了确定和取消选项。按

我正在用Swift编写一个iOS8应用程序。我正在尝试使用Facebook登录,我正在使用Facebook iOS SDK 4.1。我没有使用Facebook按钮。我有自己的简单按钮。单击按钮,调用我编写并粘贴在下面的facebookLogin方法。我在已经登录Facebook的计算机上运行该应用程序。第一次运行时,它会请求权限,在我按OK后,它会登录,一切正常。在以后的运行中,当我仍然在同一台计算机上登录时,应用程序再次显示权限页面,这一次表示用户已经授权了应用程序,并给出了确定和取消选项。按Ok,继续登录。我正在附上下面的截图。我的问题是,我不想在以后的运行中获得权限页。我认为它应该悄悄地进行,而不会跳转到Facebook应用程序/网站。在电话上尝试也有类似的行为。它不会显示权限页面,但会跳转到Facebook应用程序,并且几乎立即返回

let fbLoginManager = FBSDKLoginManager()

func facebookLogin() {

    var token = FBSDKAccessToken.currentAccessToken()
    if (token != nil) {
        return
    }

    fbLoginManager.logInWithReadPermissions(["public_profile"], handler: { (result: FBSDKLoginManagerLoginResult!, error: NSError!) -> Void in
        if ((error) != nil) {
            // Process error
        } else if (result.isCancelled) {
            // Handle cancellations
        } else {
            if (result.grantedPermissions.contains("public_profile"))  {
                // Handle the result
            }
        }
    })
}
以下是AppDelegate中的相关部分:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {

    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
谢谢你的帮助。我已经看过很多关于这个主题的帖子,但没有太多帮助,特别是在新的Facebook SDK上。谢谢


在调用
logInWithReadPermissions
之前,您应该检查是否有有效的
FBSDKAccessToken

if FBSDKAccessToken.currentAccessToken != nil
{
  // already logged in with the requested permissions
}
else
{
  // login here
}
请记住,如果您决定请求一些新权限,您可能应该通过检查访问令牌的
权限
属性(
NSSet
)来特别检查这些权限,而不仅仅是检查是否存在令牌。

(这原本是我的评论,但结果也是解决方案)

您需要确保您正在呼叫(Swift等价物)以下各项:

return [[FBSDKApplicationDelegate sharedInstance] 
         application:application 
         didFinishLaunchingWithOptions:launchOptions];
这是SDK正确启动所必需的。这里记录了这一点:

从[UIApplicationLegate]调用此方法 应用程序:AppDelegate的didFinishLaunchingWithOptions:]方法 对于你的应用程序。应该调用它以正确使用Facebook SDK


我已经在方法的开头检查令牌:var token=FBSDKAccessToken.currentAccessToken()if(token!=nil){return}当我重新启动应用程序时,令牌为零,因此它会调用登录名。但我认为,由于我已经登录到该设备,它不应该显示权限页。您是否可以尝试获取当前访问令牌的令牌字符串,例如:您正在进行硬重启(删除应用程序或关闭模拟器),或用户正常操作的方式?在正常情况下,Facebook数据应保存到磁盘。@Dima我正在进行硬重启。我的问题现在已解决。请参阅我上面的评论。我应该覆盖应用程序:didFinishLaunchingWithOptions。而不调用Facebook的应用程序:didFinishLaunchingWithOptions我方法currentAccessToken不会被加载,并且会保持为零,因此检查对我没有帮助。感谢您对此进行跟踪!@user2732722 hi。每次我检查用户是否在我关闭应用程序时登录时都遇到了零(使用currentAccessToken)。FBSDKApplicationDelegate.sharedInstance()(application,openURL:url,sourceApplication:sourceApplication,annotation:annotation)似乎起到了将其传输到另一个页面的作用,请问您如何检查用户是否已登录?我不太熟悉Swift,但您是否正确调用了它?
返回[[FBSDKApplicationDelegate sharedInstance]应用程序:应用程序didFinishLaunchingWithOptions:launchOptions]
谢谢!您的评论实际上是我问题的解决方案。我没有覆盖应用程序:didfishlaunchingwithoptions。我在另一个线程中讨论过这个问题,@VijayMasiwal帮助我找到了您在此处提到的确切解决方案。这是指向该线程的链接[.很高兴听到这个问题为你解决了!我会把它写进一个真实的答案,这样你就可以接受了。这样,如果其他人发现了这个问题,他们可以很快看到解决方案是什么。