【问题标题】:Application is crashing on facebook in apple review应用程序在苹果评论中的 Facebook 上崩溃
【发布时间】:2019-09-25 21:32:11
【问题描述】:

我们无法审核您的应用,因为它在启动时崩溃了。我们附上了详细的崩溃日志以帮助解决此问题。

具体来说,在用户使用 facebook 登录后,您的应用在启动时仍然崩溃。

我无法捕捉到崩溃或任何错误。 这是我认为崩溃的代码(在用户使用 Facebook 登录后立即运行)

@IBAction func Btn_facebook(_ sender: Any)
{
    getFacebookUserInfo()
}

func getFacebookUserInfo()
{
    let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()

    fbLoginManager.logIn(withReadPermissions: ["public_profile","email"], from: self) { (result, error) -> Void in
        if (error == nil)
        {
            let fbloginresult : FBSDKLoginManagerLoginResult = result!
            // if user cancel the login
            if (result?.isCancelled)!{
                return
            }
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                self.fbtoken = result!.token.tokenString

            }
        }
    }
}

func getFBUserData()
{
    if((FBSDKAccessToken.current()) != nil)
    {
        FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, email, picture"]).start(completionHandler: { (connection, result, error) -> Void in

            if result != nil {

                guard FBSDKAccessToken.current().tokenString != nil else {
                    debugPrint("failed to get access token")
                    return
                }

                guard let result = result as? NSDictionary, let user_id_fb = result["id"]  as? String else {
                    print("error")

                    return
                }

            }

            if (error == nil)
            {

                let fbDetails = result as! NSDictionary

                let field = result! as? [String:Any]
                if let imageURL = ((field!["picture"] as? [String: Any])?["data"] as? [String: Any])?["url"] as? String {
                    print(imageURL)
                    let url = URL(string: imageURL)
                    print(url!)
                    self.fburl = imageURL
                    print(self.fburl!)

                }
                let checkemail = fbDetails["email"] as? String

                if(checkemail != nil)
                {
                    print(" check email not nil ", checkemail as Any)

                    self.fbemail = (fbDetails["email"] as? String)
                    self.fbid = (fbDetails["id"] as? String)
                    self.fbname = (fbDetails["name"] as? String)

                    self.GandfLogin(name: self.fbname!, email: self.fbemail!, post_image: (self.fburl!))
                }
                else
                {
                    print(" check email nil ",checkemail ?? String.self)

                    self.fbid = (fbDetails["id"] as? String)
                    self.fbname = (fbDetails["name"] as? String)

                    self.GandfLogin(name: self.fbname!, email: self.fbid!, post_image: (self.fburl!))
                }

            }
            else
            {
                print(error?.localizedDescription ?? "Not found")
            }
        })




    }
}

【问题讨论】:

  • Apple 提供了崩溃日志。这将包含一条异常消息和一个堆栈跟踪,您可以通过符号化来确定崩溃发生的位置。一般来说,您应该避免强制展开选项(例如result!self.fbName! 等)
  • 先生,如果我使用它(例如结果为 Any ,self.fbName 为 Any)。
  • 您不需要使用as Any。您应该酌情使用as? String(或任何适当的类型)以及if letguard let??

标签: ios swift facebook crash-reports


【解决方案1】:

使用软解包而不是 !在大多数情况下 因为如果 Facebook 不发送您正在寻找的数据,它可能会导致崩溃

这样做:

guard let fbDetails = result as NSDictionary else {
  //Show error to user or something else
  return
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多