Facebook SDK 로그인은 iOS 9에서 내 애플리케이션을 다시 호출하지 않습니다.
나는 다음 한 이 아이폰 OS 9 SDK 빌드 할 때 제대로 작동하려면 페이스 북 SDK 4.6을 사용하는 내 응용 프로그램을 업데이트하는 가이드.
지금 로그인 버튼을 누르면 Safari보기 컨트롤러가 표시되지만 (Facebook 앱으로 리디렉션되지 않습니까?) 권한을 수락 한 후에 Safari보기 컨트롤러가 닫히지 않습니다. 새 빈 페이지를로드하고 아무 작업도하지 않습니다. 완료 버튼을 탭하면 반환 된 FBSDKLoginManagerLoginResult
의 값 isCancelled
이 true입니다.
SDK가 Facebook 앱보다 Safari 뷰 컨트롤러를 선택하는 것이 정상입니까? 그리고 로그인이 완료된 후 콜백을받지 못하는 이유는 무엇입니까?
UIApplicationDelegate
의 application:openURL:options:
구현 시 iOS 9 application:openURL:sourceApplication:annotation:
에서는 호출되지 않습니다.
호출입니다 내가해야 할 일을했을 것 그래서 것은 FBSDKApplicationDelegate
의 application:openURL:sourceApplication:annotation:
에서 UIApplicationDelegate
의 'application:openURL:options:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
return [[FBSDKApplicationDelegate sharedInstance] application:app
openURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
Swift의 경우 이것은 나를 위해 일했습니다 (AppDelegate.swift에 추가하십시오).
@available(iOS 9.0, *)
func application(application: UIApplication,openURL url: NSURL, options: [String: AnyObject]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String,
annotation: options [UIApplicationOpenURLOptionsAnnotationKey])
}
과
@available(iOS, introduced=8.0, deprecated=9.0)
func application(application: UIApplication,openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application,
openURL: url,
sourceApplication: sourceApplication!,
annotation: annotation)
}
각각의 경우 import FBSDKCoreKit
에 다른 import
문장 과 함께 추가 하는 것을 잊지 마십시오.
기본적으로 Google 로그인이 사용하는 것입니다. 여전히 작동하지 않으면 FaceBook 문서에 지정된 것처럼 대리인과 info.plist를 설정해야합니다. 이게 도움이 되길 바란다!
Swift 3 및 Facebook SDK 4.16.0의 경우 :
AppDelegate.swift에 다음 코드를 추가하세요.
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
iOS10에서 이와 동일한 문제가 발생하는 사람들을 위해 다음을 추가했습니다.
@available(iOS 9.0, *)
func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
이것은 작동하지만 지금은 해결 방법입니다.
나는 방금이 문제를 접했습니다. 수정에 대해 @Hesham에게 감사드립니다.
다음은 Swift3 수정입니다.
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
app,
open: url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
xamarin 사용자 :
public override bool OpenUrl(UIApplication application, NSUrl url, string sourceApplication, NSObject annotation)
{
OnUrlProtocolDetected(url.ToString());
if (url.AbsoluteString.StartsWith("fb"))
{
return ApplicationDelegate.SharedInstance.OpenUrl(application, url, sourceApplication, annotation);
}
}
이 단계를 따랐습니까?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
return [[FBSDKApplicationDelegate sharedInstance] application:application
didFinishLaunchingWithOptions:launchOptions];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
];
}
I think you are missing the point where you got to call the applications delegate in App delegate. The second method is vital coz it gives the callback to your application about the login did finish in safari by the user
I was using the old 3.24 version and on iOS 9
I was facing a similar problem.
Found that in appDelegate
method - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
was
return [FBSession.activeSession handleOpenURL:url];
instead of
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
For total swift newbies like myself, the problem was an alternate implementation of the application() method:
Working version:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
open: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
Non working version (Copied from somewhere )
func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
open: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
For anyone looking for Swift assistance on this very issue the following worked for me.
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: UIApplicationOpenURLOptionsSourceApplicationKey, annotation: UIApplicationOpenURLOptionsAnnotationKey)
}
'program story' 카테고리의 다른 글
Eclipse Indigo-Android ADT 플러그인을 설치할 수 없음 (0) | 2020.11.16 |
---|---|
MVC3 Razor를 사용하여 Viewbag에서 HTML을 렌더링하는 방법 (0) | 2020.11.16 |
표준 Python 클래스를 사용하여 이미지 크기를 얻는 방법 (외부 라이브러리를 사용하지 않고)? (0) | 2020.11.16 |
새로 만들기 + 저장 및 만들기의 레일 차이점 (0) | 2020.11.16 |
Mac 터미널 자동 완성 (0) | 2020.11.16 |