TWTweetComposeViewController cansendtweet即使用户在Twitter中撤销了应用程序也是如此

时间:2012-03-20 19:12:51

标签: ios5 tweets

使用TWTweetComposeViewController类的IOS 5.x.

一切都很顺利
 if ( [TWTweetComposeViewController canSendTweet] )

除非用户在Twitter上撤消对该应用的访问权限,否则以上情况仍然属实,并且在尝试发送推文时会显示错误消息

Cannot be sent because the connection to Twitter failed.

如果用户转到SETTINGS / TWITTER / USERNAME

,则可以修复此问题

将出现一条消息

The user name of password is incorrect.

如果重新输入密码,应用程序将在Twitter上重新验证,一切都很好。

1)无论如何在程序控制下捕获错误然后可以通知用户重做设置吗?

2)即使应用程序被撤销,为什么canSendTweet也是如此?

2 个答案:

答案 0 :(得分:1)

1)否,因为这是系统级问题,所以不能直接从您的应用沙箱中控制或管理

2)canSendTweet只是确认可以在该设备上访问Twitter并且已经设置了帐户。它无意识别用户是否允许您访问其Twitter帐户。

如果您想知道您的应用是否可以访问Twitter用户,请使用:

- (void)requestAccessToAccountsWithType:(ACAccountType *)accountType 
                  withCompletionHandler:(ACAccountStoreRequestAccessCompletionHandler)handler;

位于帐户框架

#import <Accounts/Accounts.h>

作为一个例子,这是一种方法:

        accountStore = [[ACAccountStore alloc] init];
        twitterAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

[accountStore requestAccessToAccountsWithType:twitterAccountType 
                     withCompletionHandler:^(BOOL granted, NSError *error) {
                         if (!granted) {
                            // Access denied by the user - do what you need to do
                             NSLog(@"Authenticated : User rejected access to his account.");
                         } 
                         else {
                             // Access granted
                             // Do what you want here to send the tweet or whatever
                         } 
                     }];

答案 1 :(得分:0)

将设备的时间和日期设置为当前时间以外的时间也可能导致此问题。在这种情况下,Twitter不允许您从“设置”应用程序进行身份验证,并且它还会导致TWTweetComposeViewController因“连接到Twitter失败”错误消息而失败,即使canSendTweet返回true也是如此。