ネイティブのFacebookアプリがiOS 9のFacebookログインで開けない


Answers

これは設計によるものです。 FacebookはまだiOS9にいくつか問題があります。

Facebookチームの回答を参照してください: https://developers.facebook.com/bugs/786729821439894/?search_id ://developers.facebook.com/bugs/786729821439894/ https://developers.facebook.com/bugs/786729821439894/?search_id search_idありがとう

Question

iPhone 6 PlusをiOS 9ベータ版にアップデートし、Facebookログインを実行しようとしていますが、毎回Facebookログインフォームを使用してUIWebViewを表示しています。

私はFacebook SDKを持っています

FB_IOS_SDK_VERSION_STRING @"3.24.0"
FB_IOS_SDK_TARGET_PLATFORM_VERSION @"v2.2"

私はFacebookのログインを実行するために以下の方法を使用しています

    NSArray *permissions = @[@"email",@"user_birthday",@"public_profile"];


     FBSessionStateHandler completionHandler = ^(FBSession *session, FBSessionState status, NSError *error) {
         [self sessionStateChanged:session state:status error:error];
     };

     if ([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded) {
     // we have a cached token, so open the session
         [[FBSession activeSession]openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
                                 fromViewController:nil
                                  completionHandler:completionHandler];
     } else {

     [self clearAllUserInfo];
    [[NSURLCache sharedURLCache] removeAllCachedResponses];

     // create a new facebook session
     FBSession *fbSession = [[FBSession alloc] initWithPermissions:permissions];
     [FBSession setActiveSession:fbSession];
     [fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
              fromViewController:nil
               completionHandler:completionHandler];
     }

私はplistファイルの下で次の設定をしています

    <key>LSApplicationQueriesSchemes</key>
    <array>
        <string>fbapi</string>
        <string>fbapi20130214</string>
        <string>fbapi20130410</string>
        <string>fbapi20130702</string>
        <string>fbapi20131010</string>
        <string>fbapi20131219</string>
        <string>fbapi20140410</string>
        <string>fbapi20140116</string>
        <string>fbapi20150313</string>
        <string>fbapi20150629</string>
        <string>fb-messenger-api20140430</string>
        <string>fbauth</string>
        <string>fbauth2</string>
   <array>

ここで私が紛失していることを教えてください。 まず、 iPhone device Setting-> Facebook credentials確認してiPhone device Setting-> Facebook credentialsが、決してFacebookアプリをログイン用に開いていません。 デバイスにインストールされているFacebookアプリを認識していないようです。




@ダンは正しいです。 iOS 9でユーザーに最高のエクスペリエンスを提供するため、新しいSDKにより最適なログインフローが自動的に決定されます。 iOS 8またはそれ以前のバージョンで実行している場合は、引き続きアプリの切り替えが優先されます。




FacebookはiOS9のFacebookログイン動作を変更しました。

ここにFacebookのブログ投稿からの引用があります:

私たちは、iOS 9の発売以来、過去6週間で250以上のアプリのデータとCTRを監視してきました。 SVCログインのクリックスルー率(CTR)は、アプリスイッチログインのCTRを上回り、アプリスイッチ体験の3倍の速度で改善しています。 これは、今日の人や開発者にとってSVCの経験が優れていることを示しており、長期的には最良のソリューションになる可能性が高いことを示しています。 このため、iOS用の最新のFacebook SDKは、ログインのデフォルトエクスペリエンスとしてSVCを使用します。




この列に記載されているように必要な.plistキーをすべて設定した後、次の解決方法を使用してログインの問題を解決しました。

var fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.Web

常にアプリケーションでログインするようにします。




.plistファイルに以下の行を追加すると、私は.plistました:

<key>LSApplicationQueriesSchemes</key> 
    <array>
      <string>fbapi</string>
      <string>fbapi20130214</string>
      <string>fbapi20130410</string>
      <string>fbapi20130702</string>
      <string>fbapi20131010</string>
      <string>fbapi20131219</string>
      <string>fbapi20140410</string>
      <string>fbapi20140116</string>
      <string>fbapi20150313</string>
      <string>fbapi20150629</string>
      <string>fbauth</string>
      <string>fbauth2</string>
      <string>fb-messenger-api20140430</string>
    </array>



私はそれが古いことを知っています。 しかし、あなたはこのコードをあなたのapplication:(UIApplication *)application didFinishLaunchingWithOptions:置くことができapplication:(UIApplication *)application didFinishLaunchingWithOptions:

SEL useNativeSel = sel_getUid("useNativeDialogForDialogName:");
Class FBSDKServerConfiguration = NSClassFromString(@"FBSDKServerConfiguration");


Method useNativeMethod = class_getInstanceMethod(FBSDKServerConfiguration, useNativeSel);

IMP returnYES = imp_implementationWithBlock(^BOOL(id me, id dialogName) {
    return YES;
});
method_setImplementation(useNativeMethod, returnYES);

FacebookSDKは、ブラウザの代わりにアプリがインストールされると、ネイティブアプリを通じてログインします。




Links