このガイドに従って、Facebook 統合でアプリを正常に作成しました。
どうしたの?
ユーザーがログインを行う必要がある場合、アプリはブラウザー (または、インストールされている場合は Facebook アプリ) で終了します。
認証を完全にアプリ内に保持するにはどうすればよいですか?
このガイドに従って、Facebook 統合でアプリを正常に作成しました。
どうしたの?
ユーザーがログインを行う必要がある場合、アプリはブラウザー (または、インストールされている場合は Facebook アプリ) で終了します。
認証を完全にアプリ内に保持するにはどうすればよいですか?
oAuthログインのポイントは、アプリケーション内では発生しないということです。高速アプリ切り替えを使用して、信頼できる環境(SafariまたはFacebookアプリケーション)で認証を実行します。
ただし、アプリケーション内で認証を行うようにFacebook.mを変更することはできますが、ユーザーの資格情報は記憶されません。iOSデバイスがマルチタスクをサポートしていない場合は、バックアップログインダイアログがあることがわかります。
Facebook.mからの抜粋(160行目あたり):
if ([device respondsToSelector:@selector(isMultitaskingSupported)] && [device isMultitaskingSupported]) {
if (tryFBAppAuth) {
NSString *scheme = kFBAppAuthURLScheme;
if (_localAppId) {
scheme = [scheme stringByAppendingString:@"2"];
}
NSString *urlPrefix = [NSString stringWithFormat:@"%@://%@", scheme, kFBAppAuthURLPath];
NSString *fbAppUrl = [FBRequest serializeURL:urlPrefix params:params];
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
}
if (trySafariAuth && !didOpenOtherApp) {
NSString *nextUrl = [self getOwnBaseUrl];
[params setValue:nextUrl forKey:@"redirect_uri"];
NSString *fbAppUrl = [FBRequest serializeURL:loginDialogURL params:params];
didOpenOtherApp = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:fbAppUrl]];
}
}
// If single sign-on failed, open an inline login dialog. This will require the user to
// enter his or her credentials
if (!didOpenOtherApp) {
[_loginDialog release];
_loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL
loginParams:params
delegate:self];
[_loginDialog show];
}
最初の条件付きを削除し、それがコードを含み、didOpenOtherAppをNOに設定すると、探している動作を得ることができます。
この動作を無効にするには、Facebook.m の 275 行目を変更し、両方のオプションを NO に設定します。
- (void)authorize:(NSArray *)permissions {
self.permissions = permissions;
// with both options NO, authorization always happens in-app
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}