4

このガイドに従って、Facebook 統合でアプリを正常に作成しました。

どうしたの?

ユーザーがログインを行う必要がある場合、アプリはブラウザー (または、インストールされている場合は Facebook アプリ) で終了します。

認証を完全にアプリ内に保持するにはどうすればよいですか?

4

2 に答える 2

3

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に設定すると、探している動作を得ることができます。

于 2011-08-07T00:10:04.677 に答える
2

この動作を無効にするには、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];
}
于 2011-11-03T22:42:50.137 に答える