Cara menggunakan Facebook iOS SDK di iOS 10

104

Saya mencoba menggunakan Xcode 8 untuk membangun aplikasi dengan login Facebook menggunakan Swift 3. Saat saya beralih kembali iOS Simulator 9.3, itu berfungsi. Di iOS 10, saya menerima kesalahan ini:

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

dan

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

Ada yang punya solusi untuk ini?

Catatan 1 :

Setelah debugging, masalah ini adalah FBSDK cant update expect_challange. Fungsi SecItemUpdatedi dalam security.frameworktidak berfungsi. Ini adalah masalah iOS 10

trquoccuong.dll
sumber
5
"... kenapa kamu berharap ini berhasil?" Karena perangkat lunak harus berfungsi. Ini bukan salah orang ini, ini bukan salah facebook. Itu salah Apple. Mereka mendapat izin karena ini "beta", tetapi melanggar Keychain hampir tidak dapat diterima, bahkan dalam versi beta.
Jeff Holliday

Jawaban:

201

Error OSStatus -10814 terjadi ketika canOpenURL: tidak ada aplikasi yang dapat membuka URL ini (sebenarnya Facebook mencoba mencari aplikasinya dengan memanggil canOpenURL:dengan argumen "fbauth2: /"). Pencetakan terjadi di dalam fungsi, jadi Anda tidak dapat melakukan apa pun dengan itu. Tetapi jika Anda akan menjalankan aplikasi Anda di perangkat dengan aplikasi Facebook yang diinstal, Anda tidak akan melihat kesalahan ini.

Kesalahan 308 terjadi karena situasi, ketika nilai yang disimpan di rantai kunci tidak sama dengan nilai, yang disimpan dalam parameter penyelesaian facebook (untuk informasi lebih lanjut Anda dapat memeriksa -[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Itu terjadi karena Apple mengubah cara bekerja dengan rantai kunci di iOS 10. Untuk memperbaiki masalah ini Anda cukup pergi ke Target-> Kemampuan dan mengaktifkan berbagi rantai kunci (ini memungkinkan akses ke rantai kunci untuk aplikasi Anda): gambar

Jika Anda menggunakan Xamarin (baca tautan ini untuk informasi lebih lanjut, terima kasih @dynamokaj):

Pastikan Anda mengaktifkan akses rantai kunci di Entitlements dan pilih juga hak untuk build Simulator (Debug). Secara default, ini tidak disetel.

Roman Ermolov
sumber
2
terima kasih banyak, Apakah Anda memiliki dokumen tentang perubahan ini?
trquoccuong
1
Setelah keluar dari xcode, menjalankan, sudo xcode-select -switch /Applications/Xcode.app/Contents/Developerdan mencoba membangun kembali, masih mendapatkan masalah yang sama. Saya sekarang menyadari bahwa kesalahan yang saya lihat lebih mirip dengan stackoverflow.com/questions/39091841/…
Roy Kolak
1
@NikitaP sepertinya Anda memiliki pengalaman dengan masalah yang @ RoyKolak sebutkan di atas.
Roman Ermolov
1
@NikitaP menemukan jawabannya. Itu adalah pustaka pihak ketiga (CleverTap) yang mencoba diintegrasikan secara otomatis ke dalam delegasi aplikasi. Saya menjawab di stackoverflow.com/questions/39091841/… Terima kasih atas perhatian Anda!
Roy Kolak
3
@RomanErmolov Saya mengetahuinya, saya menggunakan Xamarin dan saat membangun untuk debug, file Entitlement.plist tidak digunakan secara default. Ketika saya menyertakan Hak untuk debug, itu berhasil. Hal berikut ini memberi saya dorongan terakhir untuk mendapatkan solusi yang tepat. stackoverflow.com/a/39576798/1062572 - Mungkin Anda dapat memperbarui jawaban Anda untuk memudahkan Xamarin dudes mengetahui apakah mereka hilang.
dynamokaj
5

Masalah yang sama ada di aplikasi saya, saya memeriksa banyak solusi tetapi tidak berfungsi untuk saya. Saya telah memperbaiki masalah ini menggunakan metode di bawah ini.

Buka Tautan ini Pilih Aplikasi Anda dan konfigurasikaninfo.plist

import dan tambahkan kode ini di 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)
}
ZAFAR007
sumber
4

Alasan utama mengapa Anda mendapatkan kesalahan berikut,

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

adalah simulator iOS Anda belum menginstal Aplikasi Facebook. Sampai Anda menginstal aplikasi di simulator iOS Anda, Anda akan terus mendapatkan kesalahan. Coba jalankan aplikasi iOS Anda pada perangkat iOS yang disediakan dengan Facebook diinstal dan Anda tidak akan melihat pesan kesalahan lagi. Semoga ini membantu!

umarqattan.dll
sumber
Ini harus membuka antarmuka web ketika aplikasi fb tidak diinstal.
Softlion
3

Dalam kasus saya, perbaikannya adalah *:

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 
}

* Seperti yang direkomendasikan oleh @MoridinBG di halaman Github SDK Facebook

Ruben Marin
sumber
0

Kesalahan ini juga dapat terjadi jika Anda menggunakan FBSDKCoreKit atau FBSDKLoginKit versi 4.39.0. Ada bug dalam versi SDK ini. Tingkatkan ke 4.39.1 atau lebih tinggi untuk memperbaikinya. Detailnya di sini .

Sebagai catatan tambahan, pengguna lain menyebutkan bahwa kesalahan ini terlihat jika Anda tidak menginstal Facebook di simulator. Itu benar, tetapi SDK seharusnya secara otomatis kembali ke metode login Web ketika aplikasi tidak diinstal. Jika itu tidak terjadi, hal itu mungkin disebabkan oleh masalah lain seperti nilai yang hilang / salah konfigurasi di Info.plist Anda (periksa LSApplicationQueriesSchemes) atau metode yang hilang di AppDelegate Anda.

Code Commander
sumber
-3

Dalam kasus saya, masalahnya adalah Google Analytics. Secara default sepertinya itu menambahkan pengontrol tampilan sendiri di atas pengontrol tampilan aplikasi. Menyetel "FirebaseAppDelegateProxyEnabled" ke "TIDAK" di {Your app} -Info.plist memecahkan masalah.

da1
sumber