Swift:请求访问Facebook时的例外情况

时间:2016-10-16 10:13:33

标签: ios swift facebook swift3 ios10

更新到XCode 8,Swift 3和iOS 10后,我在请求访问Facebook帐户的权限时开始出现以下错误:

  

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'访问选项不是   允许此帐户类型。 options参数必须为nil。'

我在SO上发现了三个这样的错误:

  1. Access options are not permitted for this account type. The options argument must be nil.;
  2. Facebook SDK login crash
  3. NSInvalidArgumentException thrown from ACAccountStore when calling [FBSession openActiveSessionWithPermissions...] on iOS 6.0 and iOS 6.0.1
  4. 前两个没有答案;最后一个建议检查accountType(withAccountTypeIdentifier ...)返回的值是不是nil,我已经在做了。

    如其他地方所述,此错误与documentation不一致,{{3}}表示Facebook需要选项词典。

    这是一个小例子,它可以重现问题并大量显示错误,并检查我认为可以进行错误检查的所有内容:

    import UIKit
    import Social
    import Accounts
    
    class DVSocialTestViewController: UIViewController {
    
        let localURL =  URL(string: "fb://")
        let serviceType = SLServiceTypeFacebook
        let accountID = ACAccountTypeIdentifierFacebook
        var accountType: ACAccountType? {
            return ACAccountStore().accountType(withAccountTypeIdentifier: self.accountID)
        }
        var accounts: [Any]? {
            guard let ac = self.accountType else { return nil }
            return ACAccountStore().accounts(with: ac)
        }
        static let appID = "MyAppID"
        let basicOptions =
            [ACFacebookAppIdKey: DVSocialTestViewController.appID,
             ACFacebookPermissionsKey: ["basic_info"],
             ACFacebookAudienceKey: ACFacebookAudienceFriends] as [AnyHashable: Any]
        let publishOptions =
            [ACFacebookAppIdKey:DVSocialTestViewController.appID,
             ACFacebookPermissionsKey:["publish_actions"],
             ACFacebookAudienceKey:ACFacebookAudienceFriends] as [AnyHashable: Any]
    
        var applicationIsInstalled: Bool {
            guard let url = self.localURL else {
                return false
            }
            return UIApplication.shared.canOpenURL(url)
        }
    
        var serviceIsAvailable: Bool {
            return SLComposeViewController.isAvailable(forServiceType: self.serviceType)
        }
    
        var userIsLoggedIn: Bool {
            guard let ac = self.accounts, ac.count > 0 else {
                NSLog("\(self.accounts)")
                return false
            }
            return true
        }
    
        func requestPermissionsForAccountType(_ type: ACAccountType) {
    
            ACAccountStore().requestAccessToAccounts(with: type, options: self.basicOptions) {
                (success: Bool, error: Error?) -> Void in
                if !success {
                    NSLog("\(error)")
                    return
                }
    
                ACAccountStore().requestAccessToAccounts(with: type, options: self.publishOptions) {
                    (success: Bool, error: Error?) -> Void in
                    if !success {
                        NSLog("\(error)")
                        return
                    }
                }
    
            }
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            guard self.applicationIsInstalled else {
                NSLog("FB Application is not installed.")
                return
            }
    
            guard self.serviceIsAvailable else {
                NSLog("FB Service is unavailable.")
                return
            }
    
            guard self.userIsLoggedIn else {
                NSLog("User is not logged into FB.")
                return
            }
    
            guard let AT = self.accountType else {
                NSLog("No accounts.")
                return
            }
    
            self.requestPermissionsForAccountType(AT)
    
        }
    }
    

    有没有人碰到这个?关于我缺少什么的任何建议?

    修改

    我觉得我的问题与建议的副本不同,原因很少。

    1. 我没有使用Facebook SDK。
    2. 这不是一个“罕见的情况” - 每次运行时都会在这个例子中发生。
    3. 这是在从前面的版本更新到XCode 8,Swift 3和iOS 10时开始发生的。
    4. 如上所述,对另一个问题(我承认不接受)的唯一答案是解决我的问题。
    5. 我提供了一个完整的,最小的例子,而另一个问题却没有。

0 个答案:

没有答案