使用ACAccountStore保存Facebook帐户

Pau*_*nne 5 ios acaccountstore

我正在尝试使用iOS Social.framework分享到Facebook.但是,大多数用户不会在设置> Facebook中设置Facebook,因此当您调出UIActivityViewController时Facebook不会显示,但它没有列出.(参见UIActivity没有设置Facebook或只是谷歌"Facebook没有在UIActivityViewController中显示,"有很多人试图解决这个问题.)

我们的应用程序已经使用Facebook SDK,因此我可以获取Facebook帐户信息,所以我想我会获取信息,然后将信息保存在设置> Facebook中.这是我的代码.(这是我从拿到我们什么时候使用saveAccount:(ACAccount*)帐户ACAccountStore类iOS的requestAccessToAccountsWithType没有显示权限提示/ 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);
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

我在那里添加了对requestAccessToAccountsWithType的调用,因为我没有从saveAccount获得ACErrorPermissionDenied.当我运行这个时,我确实看到我的应用程序幻灯片暂时放在Facebook对话框中(如果我在Facebook的网站上删除我的应用程序,它确实会显示完整对话框,询问我授予的权限.)

问题是授予永远是NO,所以我永远不会有机会保存帐户.我在这里错过了什么?

我在安装了Facebook App的真实设备上运行此设置.

我很感激任何帮助,谢谢!

Raf*_*eek 1

对此没有可用的解决方案。iOS 原生 facebook 应用程序不允许将帐户写入或保存到ACAccountStore. 它只允许从 访问帐户ACAccountStore。iOS 一次只允许存储 1 个 Facebook 帐户。尝试做这些步骤你就会很容易理解,

  1. 将 Facebook 帐户添加到设置应用程序并尝试获取访问权限。这将得到极大的许可。

  2. 删除帐户并尝试获取权限,它将拒绝访问。

  3. 添加一个 facebook 帐户并获取访问权限并尝试将新帐户保存到ACAccountStore,它会说不允许本机应用程序将帐户保存到ACAccountStore

建议的解决方案是将帐户添加到设置应用程序并使用它登录并使用社交框架或共享presentOSIntegratedDialog