Xcode 6 と iOS 8 に更新する前に Facebook ログインが機能していたため、これは非常に奇妙な問題です。これをさらに奇妙なことに、Twitter はうまく機能していますが、Facebook は didLogin コールバックを呼び出していません。
AppDelegate で私がやっていることは次のとおりです。
@interface AppDelegate : UIResponder <UIApplicationDelegate, NSURLConnectionDataDelegate, UITabBarControllerDelegate, PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate>
次に、FacebookとTwitterをセットアップしましたapplication:didFinishLaunchingWithOptions:
[Parse setApplicationId:PARSE_APPLICATION_ID
clientKey:PARSE_CLIENT_KEY];
[PFFacebookUtils initializeFacebook];
[PFTwitterUtils initializeWithConsumerKey:TWITTER_CONSUMER_KEY
consumerSecret:TWITTER_CONSUMER_SECRET];
これらを設定した後、次のように rootViewController を設定します。
self.welcomeViewController = [[ConfigViewController alloc] init];
self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
[self.navController setNavigationBarHidden: NO];
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];
viewDidAppear私の中で私ConfigViewControllerは次のチェックを行います:
// Force logout for testing
//[(AppDelegate *)[[UIApplication sharedApplication] delegate] logOut];
// If not logged in, present login view controller
if (![PFUser currentUser]) {
[(AppDelegate *)[[UIApplication sharedApplication] delegate] presentLoginViewControllerAnimated:NO];
return;
}
// Present UI
[(AppDelegate *)[[UIApplication sharedApplication] delegate] presentTabBarController];
この時点で、ユーザーがログインしていない場合、次のことが で発生しpresentLoginViewControllerAnimatedます。
// Customize the Log In View Controller
loginViewController = [[LoginViewController alloc] init];
loginViewController.delegate = self;
loginViewController.facebookPermissions = @[@"email",@"public_profile",@"user_friends"];
loginViewController.fields = PFLogInFieldsUsernameAndPassword | PFLogInFieldsTwitter | PFLogInFieldsFacebook | PFLogInFieldsSignUpButton | PFLogInFieldsPasswordForgotten | PFLogInFieldsLogInButton;
// Customize the Sign Up View Controller
signUpViewController = [[SignupViewController alloc] init];
signUpViewController.delegate = self;
signUpViewController.fields = PFSignUpFieldsDefault;
loginViewController.signUpController = signUpViewController;
[self.welcomeViewController presentViewController:loginViewController animated:NO completion:nil];
ここに loginViewController が表示されます。ユーザーが Twitter ボタンをタップすると、問題なくログインできます。ただし、Facebook ボタンをタップすると、Facebook の確認画面が表示されます。[OK] をクリックすると、loginViewController に戻ります。これを呼び出す必要があります:
- (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user
loginViewController を閉じて、追加のアクションも実行できるようにします。なぜこれが起こっているのかについて何か考えはありますか?
繰り返しますが、loginViewController:didLogInUser: delegate が Facebook に対して呼び出されないのはなぜですか?
どんな助けでも大歓迎です!
[編集]
多くのテストと多くの頭痛の種の後、ここにこれに関する最新のものがあります。
URL SchemesInfo.plist を台無しにすると、機能します。名前を から に変更したところURL Schemes、URL Scheme次のエラーが表示されました。
FBSDKLog: Cannot use the Facebook app or Safari to authorize, fb6************** is not registered as a URL Scheme
このエラーが発生しても、FaceBook にログインするためのポップアップ画面が表示されます。私はそれに記入し、私は入っています、それはうまくいきます、私はFacebookでログインできます. これは便利ではないようですが、機能しています。
私が試した他のテスト/ことは、Facebookアプリをダウンロードしてログインしようとすること、Facebookアプリなしで(サファリ経由で)ログインすること、AppDelegateの代わりにwelcomeViewControllerにデリゲートを実装すること、およびParse / Facebook SDKを更新することでした.
この問題は、Facebook や safari などの別のアプリを開くことに関係している可能性があると思います。私がこれに傾倒している理由は、Twitter 画面がモーダル ポップアップ ビューであり、問題なく動作するためです。Facebook でこのエラーが表示された場合、Safari または Facebook アプリに切り替わらず、代わりにモーダル ポップアップ ログインが表示され、正常に動作します。これにより、問題はアプリの切り替えとコールバックの適切な受信に関連していると思われます。
言及しなかった 3 番目のログイン オプションもあります。この 3 番目のオプションは、ソーシャル メディア アカウントなしでサインアップするだけで機能し、これも機能しています。
私を正しい方向に向けてくれたMatt Tangに大いに感謝します。