วิธีใช้ Facebook iOS SDK บน iOS 10


104

ฉันพยายามใช้ Xcode 8 เพื่อสร้างแอปด้วยการเข้าสู่ระบบ Facebook โดยใช้ Swift 3 เมื่อฉันเปลี่ยนกลับ iOS Simulator 9.3 มันก็ใช้งานได้ ใน iOS 10 ฉันได้รับข้อผิดพลาดนี้:

""fbauth2:/" The operation couldn’t be completed. (OSStatus error -10814.)"

และ

Optional(Error Domain=com.facebook.sdk.login Code=308 "(null)")

ใครมีวิธีแก้ปัญหานี้?

หมายเหตุ 1:

หลังจากการดีบักปัญหานี้คือ FBSDK ไม่สามารถอัปเดตexpect_challangeได้ ฟังก์ชันSecItemUpdateภายในsecurity.frameworkไม่ทำงาน นี่คือปัญหาของ IOS 10


5
"... ทำไมคุณถึงคาดหวังว่าจะได้ผล" เพราะซอฟต์แวร์ควรทำงาน ไม่ใช่ความผิดของผู้ชายคนนี้ไม่ใช่ความผิดของ Facebook เป็นความผิดของ Apple พวกเขาได้รับบัตรผ่านเพราะนี่คือ "เบต้า" แต่การทำลายพวงกุญแจเป็นเรื่องที่ไม่สามารถยอมรับได้แม้จะเป็นรุ่นเบต้าก็ตาม
Jeff Holliday

คำตอบ:


201

ข้อผิดพลาด OSStatus -10814 เกิดขึ้นเมื่อcanOpenURL: ไม่พบแอปพลิเคชันใด ๆที่สามารถเปิด URL นี้ได้ (จริงๆแล้ว Facebook พยายามค้นหาแอปพลิเคชันของตนโดยโทรcanOpenURL:ด้วยอาร์กิวเมนต์ "fbauth2: /") การพิมพ์เกิดขึ้นภายในฟังก์ชันดังนั้นคุณจึงไม่สามารถทำอะไรได้ แต่ถ้าคุณจะเรียกใช้แอปพลิเคชันบนอุปกรณ์ที่ติดตั้งแอพ Facebook คุณจะไม่เห็นข้อผิดพลาดนี้

ข้อผิดพลาด 308เกิดขึ้นเนื่องจากสถานการณ์เมื่อค่าที่เก็บไว้ในพวงกุญแจไม่เท่ากับค่าซึ่งถูกเก็บไว้ในพารามิเตอร์การทำให้สมบูรณ์ของ Facebook (สำหรับข้อมูลเพิ่มเติมคุณสามารถตรวจสอบได้-[FBSDKLoginManager completeAuthentication:expectChallenge:])

มันเกิดขึ้นเนื่องจาก Apple เปลี่ยนวิธีการทำงานกับพวงกุญแจใน iOS 10 ในการแก้ไขปัญหานี้คุณควรไปที่ Targets-> Capabilities และเปิดใช้งานการแชร์พวงกุญแจ (ช่วยให้สามารถเข้าถึงพวงกุญแจสำหรับแอปของคุณได้): ภาพ

หากคุณใช้Xamarin (อ่านลิงค์นี้สำหรับข้อมูลเพิ่มเติมขอบคุณ @dynamokaj):

ตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งานการเข้าถึงพวงกุญแจในการให้สิทธิ์และเลือกสิทธิ์สำหรับการสร้างจำลอง (Debug) ด้วย โดยค่าเริ่มต้นจะไม่ได้ตั้งค่านี้


2
ขอบคุณมากคุณมีเอกสารเกี่ยวกับการเปลี่ยนแปลงนี้หรือไม่?
trquoccuong

1
หลังจากออกจาก xcode รันsudo xcode-select -switch /Applications/Xcode.app/Contents/Developerและพยายามสร้างใหม่ยังคงได้รับปัญหาเดิม ตอนนี้ฉันตระหนักดีว่าข้อผิดพลาดที่ฉันเห็นนั้นคล้ายกับstackoverflow.com/questions/39091841/…
Roy Kolak

1
@NikitaP ดูเหมือนว่าคุณจะมีประสบการณ์กับปัญหาที่ @ RoyKolak กล่าวไว้ข้างต้น
Roman Ermolov

1
@NikitaP คิดออก เป็นไลบรารีของบุคคลที่สาม (CleverTap) ที่พยายามรวมเข้ากับตัวแทนของแอปโดยอัตโนมัติ ฉันตอบกลับในstackoverflow.com/questions/39091841/…ขอบคุณสำหรับความสนใจ!
Roy Kolak

3
@RomanErmolov ฉันคิดออกฉันอยู่ใน Xamarin และเมื่อสร้างเพื่อแก้จุดบกพร่องไฟล์ Entitlement.plist จะไม่ถูกใช้โดยค่าเริ่มต้น เมื่อฉันรวมสิทธิ์ในการแก้ไขข้อบกพร่องมันใช้งานได้ สิ่งต่อไปนี้ทำให้ฉันได้รับการผลักดันขั้นสุดท้ายในการแก้ไขปัญหาที่เหมาะสม stackoverflow.com/a/39576798/1062572 - บางทีคุณอาจอัปเดตคำตอบของคุณเพื่อให้ง่ายขึ้นสำหรับ Xamarin dudes ที่จะเข้าใจว่าพวกเขาหายไป
dynamokaj

5

ปัญหาเดียวกันในแอปของฉันฉันตรวจสอบวิธีแก้ปัญหามากมาย แต่ไม่ได้ผลสำหรับฉัน ฉันได้แก้ไขปัญหานี้โดยใช้วิธีการด้านล่าง

ไปที่ลิงค์นี้เลือกแอพของคุณและกำหนดค่าไฟล์info.plist

import และเพิ่มรหัสนี้ในไฟล์ AppDelegate

import FBSDKCoreKit
import FBSDKLoginKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

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

4

สาเหตุหลักที่ทำให้คุณได้รับข้อผิดพลาดต่อไปนี้

canOpenURL: failed for URL: "fbauth2:/" - error: "The operation couldn’t be completed. (OSStatus error -10814.)

คือเครื่องจำลอง iOS ของคุณไม่ได้ติดตั้งแอปพลิเคชัน Facebook จนกว่าคุณจะติดตั้งแอปพลิเคชันบนโปรแกรมจำลอง iOS ของคุณคุณจะยังคงได้รับข้อผิดพลาด ลองเรียกใช้แอปพลิเคชัน iOS ของคุณบนอุปกรณ์ iOS ที่จัดเตรียมไว้โดยติดตั้ง Facebook แล้วคุณจะไม่เห็นข้อความแสดงข้อผิดพลาดอีก หวังว่านี่จะช่วยได้!


ควรเปิดเว็บ ui เมื่อไม่ได้ติดตั้งแอพ fb
Softlion

3

ในกรณีของฉันการแก้ไขคือ *:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

  // First, handle Facebook URL open request
  if let fbSDKAppId = FBSDKSettings.appID(), url.scheme!.hasPrefix("fb\(fbSDKAppId)"), url.host == "authorize" { 
    let shouldOpen: Bool = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 
    return shouldOpen 
  } 

  // After it, handle any other response (e.g. deep links)
  handlerOtherUrls(url: url) 
  return true 
}

* ตามคำแนะนำของ @MoridinBG ที่หน้า Github ของ Facebook SDK


0

ข้อผิดพลาดนี้อาจเกิดขึ้นได้หากคุณใช้ FBSDKCoreKit หรือ FBSDKLoginKit เวอร์ชัน 4.39.0 เกิดข้อบกพร่องใน SDK เวอร์ชันนี้ อัปเกรดเป็น 4.39.1 หรือสูงกว่าเพื่อแก้ไข รายละเอียดที่นี่ .

ตามหมายเหตุด้านข้างผู้ใช้รายอื่นกล่าวว่าข้อผิดพลาดนี้จะเห็นได้หากคุณไม่ได้ติดตั้ง Facebook บนเครื่องจำลอง นั่นเป็นความจริง แต่ SDK ควรจะถอยกลับไปใช้วิธีการเข้าสู่ระบบเว็บโดยอัตโนมัติเมื่อไม่ได้ติดตั้งแอป หากไม่เกิดขึ้นอาจเกิดจากปัญหาอื่นเช่นค่าที่หายไป / กำหนดค่าไม่ถูกต้องใน Info.plist ของคุณ (ตรวจสอบ LSApplicationQueriesSchemes) หรือวิธีการที่ขาดหายไปใน AppDelegate ของคุณ


-3

ในกรณีของฉันปัญหาคือ Google Analytics ตามค่าเริ่มต้นดูเหมือนว่าจะเพิ่มตัวควบคุมมุมมองของตัวเองที่ด้านบนของตัวควบคุมมุมมองของแอป การตั้งค่า "FirebaseAppDelegateProxyEnabled" เป็น "NO" ใน {Your app} -Info.plist ช่วยแก้ปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.