1

Facebook を iOS と統合する方法についての facbook ページを確認しましたが、私が探していたものは少し異なります。

ユーザーが何かを共有することを決定した場合にのみ、Facbook ログインを要求したいと思います。FB ドキュメントで説明されているフローは、ログイン方法 (FB ログインからの非同期応答を処理する) と公開ボタンを表示する方法を説明していますが、必要なのは「投稿」を表示することです。 FBへ」ボタンをクリックすると、ユーザーがログインしてから、投稿される内容のプレビューに移動してから、FBに投稿してもらいたいと思います。

FB SDK と iOS 5 を使用していますが、難しいのは、FB ログイン フローを直接 Post フローに接続する方法です。

ありがとうエランゴ

4

1 に答える 1

0

以下は、これを行うために私が書いたコードです。ユーザーがデバイス設定から Facebook にサインインしていない場合は、 を呼び出すだけでユーザー エクスペリエンスが向上しますopenActiveSessionWithPublishPermissions:。これにより、読み取りと公開の両方のアクセス許可が 1 つのステップで実行されます。それ以外の場合は、2 つのアクセス許可を順番に実行するだけです。読み取り許可が成功するとすぐに、公開許可を行います。

Facebook SDK 3.2.1 を使用して、iOS6 および iOS5 デバイスでこのコードをテストしました。

- (BOOL)hasFacebookInDeviceSettings
{
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    ACAccountType *accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"];
    BOOL hasFacebookBuiltinAccount = (accountTypeFB != nil);
    return hasFacebookBuiltinAccount;
}

- (BOOL)hasLoggedInToFacebookInDeviceSettings
{
    if (![self hasFacebookInDeviceSettings]) {
        return NO;
    }
    BOOL result = [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook];
    return result;
}

- (void)openFacebookSessionWithAllowLoginUI:(BOOL)allowLoginUI
{
    if (![self hasLoggedInToFacebookInDeviceSettings]) {
        // Simpler if we don't have the built in account
        [FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"]
                                           defaultAudience:FBSessionDefaultAudienceFriends
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                             FBSessionState state,
                                                             NSError *error) {
                                             [self facebookSessionStateChanged:session
                                                                         state:state
                                                                         error:error];
                                         }];
    }
    else if (!FBSession.activeSession.isOpen) {
        __block BOOL recursion = NO;
        [FBSession openActiveSessionWithReadPermissions:nil
                                           allowLoginUI:allowLoginUI
                                      completionHandler:^(FBSession *session,
                                                          FBSessionState state,
                                                          NSError *error) {
                                          if (recursion) {
                                              return;
                                          }
                                          recursion = YES;
                                          if (error || !FBSession.activeSession.isOpen) {
                                              [self facebookSessionStateChanged:session
                                                                          state:state
                                                                          error:error];
                                          }
                                          else {
                                              assert(FBSession.activeSession.isOpen);
                                              if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
                                                  [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
                                                                                        defaultAudience:FBSessionDefaultAudienceFriends
                                                                                      completionHandler:^(FBSession *session,
                                                                                                          NSError *error) {
                                                                                          [self facebookSessionStateChanged:session
                                                                                                                      state:FBSession.activeSession.state
                                                                                                                      error:error];
                                                                                      }];
                                              }
                                          }
                                      }];
    }
}

hasFacebookInDeviceSettingsこのデバイスが設定から Facebook をサポートしているかどうかを示します (つまり、これは iOS6+ です)。

hasLoggedInToFacebookInDeviceSettingsユーザーが iOS6 の Facebook デバイス設定から Facebook にサインインしたかどうかを示します。

ログイン チュートリアルfacebookSessionStateChanged:で説明されているように、独自のコードやその他のコードを作成する必要があります。

于 2013-04-18T03:02:22.870 に答える