program story

Facebook SDK 로그인은 iOS 9에서 내 애플리케이션을 다시 호출하지 않습니다.

inputbox 2020. 11. 16. 08:16
반응형

Facebook SDK 로그인은 iOS 9에서 내 애플리케이션을 다시 호출하지 않습니다.


나는 다음 한 아이폰 OS 9 SDK 빌드 할 때 제대로 작동하려면 페이스 북 SDK 4.6을 사용하는 내 응용 프로그램을 업데이트하는 가이드.

지금 로그인 버튼을 누르면 Safari보기 컨트롤러가 표시되지만 (Facebook 앱으로 리디렉션되지 않습니까?) 권한을 수락 한 후에 Safari보기 컨트롤러가 닫히지 않습니다. 새 빈 페이지를로드하고 아무 작업도하지 않습니다. 완료 버튼을 탭하면 반환 된 FBSDKLoginManagerLoginResult의 값 isCancelled이 true입니다.

SDK가 Facebook 앱보다 Safari 뷰 컨트롤러를 선택하는 것이 정상입니까? 그리고 로그인이 완료된 후 콜백을받지 못하는 이유는 무엇입니까?


UIApplicationDelegateapplication:openURL:options:구현 시 iOS 9 application:openURL:sourceApplication:annotation:에서는 호출되지 않습니다.

호출입니다 내가해야 할 일을했을 것 그래서 것은 FBSDKApplicationDelegateapplication: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)
    }

참고URL : https://stackoverflow.com/questions/32299271/facebook-sdk-login-never-calls-back-my-application-on-ios-9

반응형