4

iOS での FB ログインに関するFacebook 独自のチュートリアル(Objective-C)に従っていましたが、ログインするたびに、最初の許可認証画面の後、悪名高い「このアプリは既に認証されています」という WebView が表示されます。

たくさんの投稿を読みましたが、整理できなかったため、(再)投稿です。アプリにはボイラープレートのログインコード以外はまったく何もないため、これはかなり奇妙だと思います。この動作は、シミュレータと実際のデバイスの両方で発生します。

このWebビューを邪魔にならないように見えることはできません

このアプリは iOS 9.0 用で、FBSDK 4.7.1 を使用しています (CocoaPods 経由でインストール):

pod 'FBSDKLoginKit', '~> 4.6'

コード自体はかなり定型的なものです。これが私の AppDelegate.m です。

#import "AppDelegate.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>

@interface AppDelegate ()

@end

@implementation AppDelegate

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [FBSDKAppEvents activateApp];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[FBSDKApplicationDelegate sharedInstance] application:application
                             didFinishLaunchingWithOptions:launchOptions];
    return YES;
}

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

そして私のViewController.m:

#import "ViewController.h"
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
    loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"];
    [loginButton setLoginBehavior:FBSDKLoginBehaviorSystemAccount]; // No difference

    loginButton.center = self.view.center;
    [self.view addSubview:loginButton];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Info.plist のスクリーンショット:

Info.plist

最後に、コンソールに次の 2 つのエラーも表示されます。

2015-11-24 11:50:42.855 lixo[26941:389756] -canOpenURL: failed for URL: "fbauth2:/" - error: "(null)"
2015-11-24 11:50:42.860 lixo[26941:389756] -canOpenURL: failed for URL: "fbauth2:/" - error: "(null)"

私が読んだことから、LSApplicationQueriesSchemesがInfo.plistに設定されている場合、これは安全に無視できます。

これを回避する方法はありますか?

4

3 に答える 3

-1

これがデフォルトの動作です。

Facebook SDK を使用すると、Facebook アプリから Facebook にログインできます (携帯電話にインストールされている場合)。そうでない場合は、Safari からのログインを管理します。アプリケーションで Safari から Facebook ログインを使用する場合は、このようにして毎回許可を受け入れる必要があります。

もう 1 つの動作として、iPhone に Facebook アプリがなく、アプリケーションから Facebook SDK ログイン プロセスを使用すると、Safari が使用されます。Safari は資格情報を Cookie に保存し、アプリケーションから Safari Cookie をクリアする方法がないため、ログアウトすることさえできません。

お使いの携帯電話に Facebook アプリがある場合は、中断することなくアプリケーションにリダイレクトされます。

編集 -

この動作は iOS 10 でも見られます。編集していただきありがとうございます - Tois

于 2015-11-24T12:19:38.843 に答える