2012-09-21 74 views
14

我使用新的Facebook集成iOS6如下所示:iOS6 Facebook:如果用户尚未配置Facebook,该怎么办?

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 ?我已经看过系统警报的屏幕截图,但由于某些原因我没有收到这些截图。我做错了什么?

回答

28

取消对[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]的检查修复了我的问题。

+0

固定为设备吗? – msk

+0

是的,当我在模拟器以及设备中删除此检查时弹出警报。 – msk

+0

是的,也为设备固定。 –

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 
    }]; 
+0

我其实刚刚意识到我确实在模拟器中获得对话框,但不是设备。这么奇怪。 –

7

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

相关问题