8

システム アカウントが存在しない場合、ログインのためにアプリ ブラウザで開くFacebook SDK( 4.9.1 ) の使用に関する問題が発生しています。

システムの Facebook アカウントからのログインはうまく機能します。次のコードを使用しています

FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init];
   manager.loginBehavior = FBSDKLoginBehaviorSystemAccount;
   [manager logInWithReadPermissions:@[@"public_profile",@"email",@"user_friends"] fromViewController:controller handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
            if (error) {
                success(kFacebookStatusFailed);
            } else if (result.isCancelled) {
                success(kFacebookStatusCancelled);
            } else {
                success(kFacebookStatusSuccess);
            }
}];

ここで定義されている必要なすべての info.plist 設定を正しく実行しました。

問題は、デバッグで見つかったSafariViewControllerを実際に使用して、アプリ内ブラウザを使用してログインする場合です。すべてのログイン プロセスを実行しますが、最終的には白い空白の画面でスタックし、閉じられません。以下のスクリーンショットを参照してください。

ここに画像の説明を入力

考えられるすべての手順を試しましたが、それを乗り越えることができませんでした。しかし、上記のログインコードと適切な設定だけで何も持たない新しいプロジェクトをセットアップすると、すべて正常に機能しました。

Fresh Project と Original Project の唯一の違いは、アプリで使用されているCrashlyticsFabricInstabugGoogle Frameworksなどのさまざまなフレームワークの数です。問題を引き起こしているこれらのフレームワークを疑う理由はありますか? だから、何が問題なのか、同じ問題に直面し、私を助けることができる人は誰でも大歓迎です.

ありがとうございました。

4

4 に答える 4

6

私は同じ問題を抱えていました。これを AppDelegate に追加します。

AppDelegate.m 内

  1. application:didFinishLaunchingWithOptions:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [[FBSDKApplicationDelegate sharedInstance] application:application
                             didFinishLaunchingWithOptions:launchOptions];
    }
    
  2. 次のメソッドを AppDelegate.m に追加します。

    -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
      return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
    }
    

SafariViewControllerのチェックが行われたかどうかはわかりませんがapplication:openURL:sourceApplication:annotation、これでうまくいきました。試してみる。うまくいくことを願っています。

ソース: https://developers.facebook.com/docs/ios/getting-started

于 2016-03-16T18:36:08.340 に答える
2

はい ログインに問題があります

-(IBAction)fbAction:(id)sender

{

    FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init];
     manager.loginBehavior=FBSDKLoginBehaviorWeb;
    
    if ([FBSDKAccessToken currentAccessToken])
    {
        [manager logOut];
        NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
        
        [self fetchUserInfo];
    }
    else
    {
        [manager logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
         {
             if (error)
             {
                 NSLog(@"Login process error");
             }
             else if (result.isCancelled)
             {
                 NSLog(@"User cancelled login");
             }
             else
             {
                 NSLog(@"Login Success");
                 if ([result.grantedPermissions containsObject:@"email"])
                 {
                     NSLog(@"result is:%@",result);
                     [self fetchUserInfo];
                     
                 }
             }
         }];
    }

}

-(void)fetchUserInfo

{

        if ([FBSDKAccessToken currentAccessToken])
        {
            NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
            
            [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, email"}]
             //[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, first_name, last_name, picture.type(large), email"}]
             
             startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                 if (!error)
                 {
                     NSLog(@"results:%@",result);
                     
                     NSString *email = [result objectForKey:@"email"];
                     NSString *userId = [result objectForKey:@"id"];
                     
                     if (email.length >0 )
                     {
                         
                         NSLog(@"email %@,userid %@",email,userId);
                     }
                     else
                     {
                         NSLog(@"Facebook email is not verified");
                     }
                 }
                 else
                 {
                     NSLog(@"Error %@",error);
                 }
             }];
        }
    
}
于 2016-02-04T06:25:12.667 に答える
0

私の場合、BranchSDK がインストールされていて、openURL:アプリのデリゲート メソッドが台無しになりました。

- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary <NSString *, id> *)options

Branchリンクを開くだけでしたが、

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

FacebookBranchリンクの両方を開いていました。

両方の方法 (iOS9 および <=iOS8) のロジックが正しく設定されていることを再確認してください。

于 2016-03-15T19:27:16.163 に答える