15

我正在使用新的 Facebook 集成,iOS6如下所示:

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){

        [fbController dismissViewControllerAnimated:YES completion:nil];

        switch(result){
            case SLComposeViewControllerResultCancelled:
            default:
            {
                NSLog(@"Cancelled.....");

            }
                break;
            case SLComposeViewControllerResultDone:
            {
                NSLog(@"Posted....");
            }
                break;
        }};

    //[fbController addImage:[UIImage imageNamed:@"1.jpg"]];
    [fbController setInitialText:@"Test message"];
    [fbController addURL:[NSURL URLWithString:self.asset.url]];
    [fbController setCompletionHandler:completionHandler];
    [self presentViewController:fbController animated:YES completion:nil];
} else {
    NSLog(@"no facebook setup");
}

这里的问题是,我在没有登录的情况下测试它,Facebook我得到的只是日志消息。

** 奇怪的是,我在模拟器中得到了对话框,但不是设备!**

如何向用户显示提醒他们需要登录 Facebook?我看过系统警报的屏幕截图,但由于某种原因我没有收到。我做错了什么?

4

3 回答 3

28

删除检查以[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]解决我的问题。

于 2012-09-21T18:55:14.153 回答
7

似乎[SLComposeViewController isAvailableForServiceType:]在模拟器中返回 true,即使您还没有在那里设置帐户。

于 2013-02-04T19:50:40.593 回答
1

我认为您不会收到任何系统警报(我不确定,但基于 Twitter 的经验)。尽管我在最近的一些博客/网络帖子中看到了它,但它对我也不起作用。我建议在这种情况下,您应该询问用户的 FB 凭据(自定义对话框或 FBDialog)并在 iPad 中添加 FB 帐户。以下代码未经测试,但您可以了解一下。我正在为 Twitter 做类似的事情,并且在我的应用程序中运行良好。

ACAccountStore *store = [[ACAccountStore alloc] init] ;
    ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    [store requestAccessToAccountsWithType:fbType options:[NSDictionary dictionaryWithObjectsAndKeys:kAppID,ACFacebookAppIdKey, nil] completion:^(BOOL granted, NSError *error) {
        if(YES) {
            ACAccount *fbAccount = [[ACAccount alloc] initWithAccountType:[store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]];

            ACAccountCredential *outhCredential = [[ACAccountCredential alloc] initWithOAuth2Token:[appDelegate.facebook accessToken] refreshToken:refesrhToken expiryDate:[appDelegate.facebook expirationDate]];


            fbAccount.credential = outhCredential;

            [store saveAccount:fbAccount withCompletionHandler:^(BOOL success, NSError *error) {
                if(success)
                {
                    [self performSelectorOnMainThread:@selector(showFBPostSheet) withObject:nil waitUntilDone:NO];
                }
            }];

            [outhCredential release];
            [fbAccount release];
            [store release];
        }
        // Handle any error state here as you wish
    }];
于 2012-09-21T18:36:25.997 回答