Cách sử dụng Facebook iOS SDK trên iOS 10


104

Tôi đang cố gắng sử dụng Xcode 8 để tạo ứng dụng có đăng nhập Facebook bằng Swift 3. Khi tôi chuyển lại iOS Simulator 9.3, nó hoạt động. Trong iOS 10, tôi nhận được lỗi này:

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

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

Bất cứ ai có giải pháp cho điều này?

Lưu ý 1:

Sau khi gỡ lỗi, vấn đề này là FBSDK không thể cập nhật expect_challange. Chức năng SecItemUpdatebên trong security.frameworkkhông hoạt động. Đây là một vấn đề của IOS 10


5
"... tại sao bạn lại mong đợi điều này thành công?" Vì phần mềm nên hoạt động. Không phải lỗi của anh này, không phải lỗi của facebook. Đó là lỗi của Apple. Họ nhận được pass vì đây là "beta", nhưng việc phá vỡ Chuỗi khóa gần như là không thể chấp nhận được, ngay cả trong phiên bản beta.
Jeff Holliday

Câu trả lời:


201

Lỗi OSStatus -10814 xảy ra khi canOpenURL: không thể tìm thấy bất kỳ ứng dụng nào có thể mở URL này (trên thực tế, Facebook đang cố gắng tìm ứng dụng của họ bằng cách gọi canOpenURL:với đối số "fbauth2: /"). Việc in diễn ra bên trong chức năng, vì vậy bạn không thể làm gì với điều đó. Nhưng nếu bạn chạy ứng dụng của mình trên thiết bị có cài đặt ứng dụng Facebook, bạn sẽ không thấy lỗi này.

Lỗi 308 xảy ra do tình huống, khi giá trị, được lưu trữ trong chuỗi khóa không bằng giá trị, được lưu trữ trong các thông số hoàn thành của facebook (để biết thêm thông tin, bạn có thể kiểm tra -[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Điều này xảy ra vì Apple đã thay đổi cách làm việc với chuỗi khóa trong iOS 10. Để khắc phục sự cố này, bạn chỉ cần đi tới Mục tiêu-> Khả năng và bật chia sẻ chuỗi khóa (nó cho phép truy cập vào chuỗi khóa cho ứng dụng của bạn): hình ảnh

Nếu bạn đang sử dụng Xamarin (hãy đọc liên kết này để biết thêm thông tin, cảm ơn @dynamokaj):

Chỉ cần đảm bảo rằng bạn bật quyền truy cập chuỗi khóa trong Entitlements và chọn các quyền cho các bản dựng Simulator (Gỡ lỗi). Theo mặc định, điều này không được đặt.


2
Cảm ơn bạn rất nhiều, Bạn có tài liệu nào về sự thay đổi này không?
trquoccuong

1
Sau khi thoát khỏi xcode, chạy sudo xcode-select -switch /Applications/Xcode.app/Contents/Developervà cố gắng xây dựng lại, vẫn gặp sự cố tương tự. Bây giờ tôi nhận ra rằng lỗi mà tôi đang thấy giống với stackoverflow.com/questions/39091841/…
Roy Kolak vào

1
@NikitaP có vẻ như bạn đã có kinh nghiệm với vấn đề mà @ RoyKolak đề cập ở trên.
Roman Ermolov

1
@NikitaP đã tìm ra. Đó là một thư viện của bên thứ ba (CleverTap) đang cố gắng tự động tích hợp vào ứng dụng đại biểu. Tôi đã trả lời trong stackoverflow.com/questions/39091841/… Cảm ơn sự chú ý của bạn!
Roy Kolak

3
@RomanErmolov Tôi đã tìm ra, tôi đang sử dụng Xamarin và khi xây dựng để gỡ lỗi, tệp Entitlement.plist không được sử dụng theo mặc định. Khi tôi bao gồm Entitlement để gỡ lỗi, nó đã hoạt động. Những điều sau đây đã giúp tôi có được một giải pháp thích hợp. stackoverflow.com/a/39576798/1062572 - Có thể bạn có thể cập nhật câu trả lời của mình để giúp các anh chàng Xamarin dễ dàng tìm ra liệu họ có bị thiếu không.
dynamicokaj

5

Vấn đề tương tự cũng xảy ra trong ứng dụng của tôi, tôi đã kiểm tra nhiều giải pháp nhưng không hiệu quả với tôi. Tôi đã khắc phục sự cố này bằng phương pháp bên dưới.

Đi tới liên kết này Chọn ứng dụng của bạn và định cấu hìnhinfo.plist

import và thêm mã này vào 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

Lý do chính khiến bạn gặp lỗi sau,

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

là trình mô phỏng iOS của bạn chưa được cài đặt Ứng dụng Facebook. Cho đến khi bạn cài đặt ứng dụng trên trình mô phỏng iOS của mình, bạn sẽ tiếp tục gặp lỗi. Hãy thử chạy ứng dụng iOS của bạn trên thiết bị iOS được cấp phép có cài đặt Facebook và bạn sẽ không thấy thông báo lỗi nữa. Hi vọng điêu nay co ich!


Nó sẽ mở ui web khi ứng dụng fb chưa được cài đặt.
Softlion

3

Trong trường hợp của tôi, cách khắc phục là *:

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 
}

* Theo đề xuất của @MoridinBG tại trang Github của SDK Facebook


0

Lỗi này cũng có thể được gây ra nếu bạn đang sử dụng FBSDKCoreKit hoặc FBSDKLoginKit phiên bản 4.39.0. Đã xảy ra lỗi trong phiên bản SDK này. Nâng cấp lên 4.39.1 hoặc cao hơn để khắc phục. Thông tin chi tiết tại đây .

Lưu ý thêm, những người dùng khác đã đề cập rằng lỗi này sẽ xuất hiện nếu bạn chưa cài đặt Facebook trên trình mô phỏng. Điều đó đúng, nhưng SDK được cho là sẽ tự động quay trở lại phương thức đăng nhập Web khi ứng dụng chưa được cài đặt. Nếu điều đó không xảy ra, nó có thể do một vấn đề khác gây ra như thiếu / định cấu hình sai giá trị trong Info.plist của bạn (kiểm tra LSApplicationQueriesSchemes) hoặc các phương thức bị thiếu trên AppDelegate của bạn.


-3

Trong trường hợp của tôi, vấn đề là Google Analytics. Theo mặc định, có vẻ như nó đang thêm bộ điều khiển chế độ xem của riêng mình lên trên bộ điều khiển chế độ xem của ứng dụng. Đặt "FirebaseAppDelegateProxyEnabled" thành "KHÔNG" trong {Your app} -Info.plist đã giải quyết được sự cố.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.