使用ACAccountStore保存Facebook帐户

时间:2013-12-05 18:07:51

标签: ios acaccountstore

我尝试使用iOS Social.framework分享到Facebook。但是,大多数用户不会在设置> Facebook中设置Facebook,因此当您调出UIActivityViewController时Facebook不会显示,但它并未列出。 (请参阅UIActivity with no settings for Facebook或只是google" facebook未在UIActivityViewController中显示,"有很多人试图解决此问题。)

我们的应用程序已经使用Facebook SDK,因此我可以获取Facebook帐户信息,所以我想我会获取信息,然后将信息保存在设置> Facebook中。这是我的代码。 (我从When do we use saveAccount:(ACAccount *)account of ACAccountStore class?iOS requestAccessToAccountsWithType is Not Showing 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的网站上删除了我的应用程序,它会显示完整的对话框,询问我授予的权限。)

问题在于授予永远是NO,所以我永远不会有机会保存帐户。我在这里缺少什么?

我在安装了Facebook App的真实设备上运行它。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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