2016-09-28 4 views
0

개발중인 애플리케이션의 경우 Facebook 로그인 SDK를 추가하고 있습니다. 다른 앱을 위해 이전에 그렇게했는데,이 앱에서 예기치 않은 동작이 발생했습니다. 어떤 이유로 설치 후 앱이 처음 시작될 때 (사용자 정의) Facebook 로그인 버튼을 누르면 Safari 로그인 화면이 열리지 않습니다. 로그인 이벤트의 핸들러는 절대로 호출되지 않으므로 오류를 표시하지 않습니다.iOS Facebook 첫 번째 설치시 맞춤 로그인이 응답하지 않습니다.

누구나 전에이 문제가 발생 했습니까?

코드 : AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    [[FBSDKApplicationDelegate sharedInstance] application:application 
         didFinishLaunchingWithOptions:launchOptions]; 
    // Some other setup code 

    return YES; 
} 

- (BOOL) application:(UIApplication *)app 
     openURL:(NSURL *)url 
     options:(NSDictionary<NSString *,id> *)options 
{ 
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:app 
                   openURL:url 
                sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
                  annotation:options[UIApplicationOpenURLOptionsAnnotationKey] 
       ]; 
    handled |= [GIDSignIn.sharedInstance handleURL:url 
          sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
            annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 
    return handled; 

} 

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 
    annotation:(id)annotation 
{ 
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application 
               openURL:url 
            sourceApplication:sourceApplication 
              annotation:annotation]; 
    handled |= [GIDSignIn.sharedInstance handleURL:url sourceApplication:sourceApplication annotation:annotation]; 
    return handled; 
} 

사용자 정의 페이스 북 인증 자 :

-(void)authenticate: (UIViewController *) viewController onCompletion: (void (^)(NSMutableDictionary *bundle, NSError *error))completion { 
    successBundle = [BundleUtils generateBundle:YES]; 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logInWithReadPermissions: permissions 
     fromViewController:viewController 
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     // Never Reached 
    }]; 
} 

그리고 사용자 정의 변수는 각 빌드 구성에 대한 사용자 정의 된 변수에 선언 관련의 Info.plist 부품 (사용)

누구나 내가 무엇인지보고있다. 있어야 할 곳에 없는?

답변

0

문제점을 발견했습니다. loginWithPermissions이 여전히 처리되는 동안 FBLoginManager를 인증 함수 내에서 인스턴스화 했으므로 할당이 해제됩니다. 그러나 이로 인해 로그인 관리자에 대한 약한 참조가 더 이상 적절한 값을 갖지 못했습니다.

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];을 초기화 도구로 이동하고 세션에 로그인을 저장하면 문제가 해결됩니다. 처음 설치시에만 발생한다는 사실은 완료하는 데 시간이 오래 걸리는 것과 관련이 있으며 로그인이 할당 해제 될 확률이 높아집니다.

관련 문제