5

iOS Social.framework を使用して Facebook に共有しようとしています。ただし、ほとんどのユーザーは [Settings] > [Facebook] で Facebook を設定していないため、UIActivityViewController を起動しても Facebook は表示されず、一覧に表示されません。( Facebook の設定のない UIActivity を参照するか、「Facebook が UIActivityViewController に表示されない」をグーグルで参照してください。この問題を解決しようとしている人はたくさんいます。)

私たちのアプリは既に Facebook SDK を使用しているため、Facebook アカウント情報を取得できます。そのため、情報を取得して、[設定] > [Facebook] に情報を保存するだけでよいと考えました。これが私のコードです。( When do we use saveAccount:(ACAccount *)account of ACAccountStore class?およびiOS requestAccessToAccountsWithType is Not Show Permission Prompt / NSAlert から取得したもの)

- (void)storeAccountWithAccessToken:(NSString *)token secret:(NSString *)secret {

    if (self.accountStore == nil) {
        self.accountStore = [[ACAccountStore alloc] init];
    }

    //We start creating an account by creating the credentials object
    ACAccountCredential *credential = [[ACAccountCredential alloc] initWithOAuthToken:token tokenSecret:secret];
    ACAccountType *acctType =[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    ACAccount *newAccount = [[ACAccount alloc] initWithAccountType:acctType];
    //Here we assign credentials and now can save account
    newAccount.credential = credential;

    NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                             [VVEnvironment stringForKey:kVVEnvironmentKeyFacebookAppID], (NSString *)ACFacebookAppIdKey,
                             [NSArray arrayWithObject:@"basic_info"], (NSString *)ACFacebookPermissionsKey,
                             ACFacebookAudienceEveryone, (NSString *)ACFacebookAudienceKey,
                             nil];


    [_accountStore requestAccessToAccountsWithType:acctType options:options completion:^(BOOL granted, NSError *error) {
        if (granted == YES) {
            [self.accountStore saveAccount:newAccount withCompletionHandler:^(BOOL success, NSError *error) {

                if (success) {
                    NSLog(@"the account was saved!");
                }
                else {
                    if ([error code] == ACErrorPermissionDenied) {
                        NSLog(@"Got a ACErrorPermissionDenied, the account was not saved!");
                    }
                    NSLog(@"the account was not saved! %d, %@", [error code], error);
                }
            }];
        }
        else {
            NSLog(@"ERR: %@ ",error);
        }
    }];
}

そこに requestAccessToAccountsWithType への呼び出しを追加しました。そうしないと、saveAccount から ACErrorPermissionDenied が返されなかったからです。これを実行すると、アプリが Facebook ダイアログのために一時的に横にスライドするのが見えます (Facebook の Web サイトでアプリを削除すると、付与する許可を求める完全なダイアログが表示されます)。

問題は、許可が常に NO であるため、アカウントを保存する機会がないことです。ここで何が欠けていますか?

Facebook アプリがインストールされ、セットアップされている実際のデバイスでこれを実行しています。

これについて何か助けていただければ幸いです、ありがとう!

4

1 に答える 1

1

これに対する解決策はありません。iOS ネイティブ facebook アプリケーションは、アカウントへの書き込みまたは保存を許可されていませんACAccountStore。からのアカウントへのアクセスのみを許可しますACAccountStore。iOS では、一度に 1 つの Facebook アカウントしか保存できません。これを簡単に理解できるこれらの手順を実行してみてください。

  1. Facebookアカウントを設定アプリに追加し、アクセス許可を取得してみてください。大許可となります。

  2. アカウントを削除し、アクセスを拒否する権限を取得してみてください。

  3. Facebook アカウントを追加し、アクセス権を取得して、新しいアカウントを に保存しようとACAccountStoreすると、ネイティブ アプリケーションがアカウントを に保存することは許可されていないと表示されますACAccountStore

提案された解決策は、アカウントを設定アプリに追加してログインし、ソーシャルフレームワークまたはpresentOSIntegratedDialog.

于 2014-01-21T07:30:59.437 に答える