iOS 10에서 Facebook iOS SDK를 사용하는 방법


104

Xcode 8을 사용하여 Swift 3을 사용하는 Facebook 로그인으로 앱을 빌드하려고합니다. 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 cant update expect_challange입니다. SecItemUpdate내부 기능이 security.framework작동하지 않습니다. 이것은 IOS 10의 문제입니다.


5
"...이게 왜 효과가있을 거라고 기대 하겠어요?" 소프트웨어가 작동해야하기 때문입니다. 이 녀석의 잘못이 아니라 페이스 북의 잘못이 아닙니다. 애플의 잘못이다. 이것은 "베타"이기 때문에 통과를 얻지 만, 키 체인을 깨는 것은 베타에서도 거의 받아 들일 수 없습니다.
Jeff Holliday

답변:


201

오류 OSStatus -10814 는이 URL을 열 canOpenURL: 수있는 애플리케이션을 찾을 수 없을 때 발생합니다 (실제로 Facebook canOpenURL:은 인수 "fbauth2 : /" 를 호출 하여 애플리케이션을 찾으려고합니다 ). 인쇄는 함수 내부에서 이루어 지므로 아무것도 할 수 없습니다. 하지만 Facebook 앱이 설치된 기기에서 애플리케이션을 실행하면이 오류가 표시되지 않습니다.

오류 308 은 키 체인에 저장된 값이 페이스 북 완성 매개 변수에 저장된 값과 같지 않은 상황으로 인해 발생합니다 (자세한 내용은 확인할 수 있음 -[FBSDKLoginManager completeAuthentication:expectChallenge:]).

Apple이 iOS 10에서 키 체인 작업 방식을 변경했기 때문에 발생합니다.이 문제를 해결하려면 Targets-> Capabilities로 이동하여 키 체인 공유를 활성화해야합니다 (앱의 키 체인에 대한 액세스를 활성화 함). 영상

Xamarin 을 사용하는 경우 ( 자세한 내용은 이 링크 를 읽고 @dynamokaj 에게 감사드립니다) :

Entitlements에서 키 체인 액세스를 활성화하고 Simulator (Debug) 빌드에 대한 권한도 선택했는지 확인하십시오. 기본적으로 설정되어 있지 않습니다.


2
감사합니다.이 변경 사항에 대한 문서가 있습니까?
trquoccuong

1
xcode를 종료하고,를 실행 sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer하고 다시 빌드를 시도한 후에도 동일한 문제가 발생합니다. 내가보고하고 오류이 더 비슷한 것을 지금 실현하고있어 stackoverflow.com/questions/39091841/...
로이 Kolak

1
@NikitaP @ RoyKolak이 위에서 언급 한 문제에 대한 경험이있는 것 같습니다.
Roman Ermolov 16.09.09

1
@NikitaP이 알아 냈습니다. 앱 델리게이트에 자동 통합하려는 타사 라이브러리 (CleverTap)였습니다. 나는 stackoverflow.com/questions/39091841/ 에서 답장했습니다… 관심을 가져 주셔서 감사합니다!
Roy Kolak 2016 년

3
@RomanErmolov 나는 그것을 알아 냈고, 나는 Xamarin에 있으며 디버그를 위해 빌드 할 때 Entitlement.plist 파일이 기본적으로 사용되지 않습니다. 디버그를위한 인 타이틀먼트를 포함 시켰을 때 작동했습니다. 다음은 적절한 솔루션에 대한 최종 푸시를 제공했습니다. stackoverflow.com/a/39576798/1062572-Xamarin 친구들이 누락되었는지 쉽게 파악할 수 있도록 답변을 업데이트 할 수 있습니다.
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 시뮬레이터에 애플리케이션을 설치할 때까지 오류가 계속 발생합니다. Facebook이 설치된 프로비저닝 된 iOS 장치에서 iOS 애플리케이션을 실행하면 오류 메시지가 다시 표시되지 않습니다. 도움이 되었기를 바랍니다!


fb 앱이 설치되지 않은 경우 웹 UI가 열립니다.
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 
}

* Facebook SDK의 Github 페이지 에서 @MoridinBG가 추천 한대로


0

이 오류는 FBSDKCoreKit 또는 FBSDKLoginKit 버전 4.39.0을 사용하는 경우에도 발생할 수 있습니다. 이 버전의 SDK에 버그가 있습니다. 이를 수정하려면 4.39.1 이상으로 업그레이드하십시오. 자세한 내용은 여기 .

참고로 다른 사용자는 시뮬레이터에 Facebook을 설치하지 않은 경우이 오류가 표시된다고 언급했습니다. 사실이지만 SDK는 앱이 설치되지 않은 경우 자동으로 웹 로그인 방법으로 대체됩니다. 그렇지 않은 경우 Info.plist의 누락 / 잘못 구성된 값 (LSApplicationQueriesSchemes 확인) 또는 AppDelegate의 누락 된 메서드와 같은 다른 문제로 인해 발생할 수 있습니다.


-3

제 경우 문제는 Google Analytics였습니다. 기본적으로 앱의 뷰 컨트롤러 위에 자체 뷰 컨트롤러를 추가하는 것 같습니다. {Your app} -Info.plist에서 'FirebaseAppDelegateProxyEnabled'를 'NO'로 설정하면 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.