3

在 iOS 6 中,用户可以通过设置>Facebook 登录 Facebook。该视图中有一个部分列出了用户可以选择允许/禁止使用 Facebook 帐户的应用程序。

我已将 FacebookSDK.framework 集成到我的应用程序中,并且此列表中的应用程序会出现一行。只是,我的应用程序的名称没有列出,它的应用程序图标也没有列出。

我已经进行了几次搜索,但似乎找不到将名称/图标添加到列表中的方法。谁能指出我正确的方向?

4

1 回答 1

3

您需要使用帐户存储方法来请求访问权限:

-(void)authenticateFacebook {
if([UIActivityViewController class] ) {
    NSArray *faceBookPermissions = @[@"publish_stream"];
    ////ACFacebookAppVersionKey: @"1.0",

    NSDictionary *faceBookOptions = @{
ACFacebookAppIdKey: @"xxxxxxxx",
ACFacebookPermissionsKey:faceBookPermissions,
ACFacebookAudienceKey:ACFacebookAudienceFriends
    };

    AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if(del.accountStore == nil) {
        del.accountStore = [[ACAccountStore alloc] init];
    }
    if(del.facebookAccount == nil) {
        ACAccountType *facebookAccountType = [del.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
        [del.accountStore requestAccessToAccountsWithType:facebookAccountType
                                                   options:faceBookOptions
                                                completion:^(BOOL granted, NSError *error)
         {
             if (granted) {
                 NSArray *accounts = [del.accountStore accountsWithAccountType:facebookAccountType];
                 del.facebookAccount = [accounts lastObject];
                 NSLog(@"got an account");
                 [self performSelectorOnMainThread:@selector(gotAnAccount) withObject:self waitUntilDone:NO];
             } else {
                 NSLog(@"No account");
                 //fail gracefully
                 [self performSelectorOnMainThread:@selector(noAccount) withObject:self waitUntilDone:NO];
             }
         }];
    }
}

完成后,您可以使用您的应用程序 ID 发布到 Facebook,如下所示:

    -(void)postToFacebook:(NSDictionary *)parameters  {

    AppDelegate *del = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];

    SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                            requestMethod:SLRequestMethodPOST
                                                      URL:feedURL
                                               parameters:parameters];
    request.account = del.facebookAccount;
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        NSString *alertText;
        if (error) {
            alertText = [NSString stringWithFormat:
                         @"error: domain = %@, code = %d",
                         error.domain, error.code];
            [self performSelectorOnMainThread:@selector(errorWithRequest:) withObject:alertText waitUntilDone:NO];
        } else {
            alertText = @"Posted action, id: %@";
            [self performSelectorOnMainThread:@selector(cancelButtonAction:) withObject:nil waitUntilDone:NO];

        }
        NSLog(@"%@",alertText);
    }];
}

您需要您的应用程序委托拥有 accountStore 和 account 变量,然后创建使用的 @selector 方法。请注意,如果完成处理程序对 UI 执行任何操作,则它们应该在主线程上运行,否则您将等待一段时间等待完成处理程序 UI 代码运行。

于 2012-09-29T18:19:04.023 回答