2

在用户允许我的应用访问他们的 Twitter 帐户后,他们仍然可以进入设置应用并通过点击开关来撤销访问:

推特设置应用

发生这种情况时,我的应用程序需要显示正确的注销图形。我可以在 iOS 5中毫无问题地做到这一点,因为当我的应用程序的访问权限被撤销时[TWTweetComposeViewController canSendTweet]返回。NO但是,在 iOS 6中,即使在访问权限被撤销后canSendTweet仍会继续返回。YES所以在 iOS 6 中,我的 UI 处于错误状态。有没有其他方法可以在 iOS 6 中正确检测到这一点?

- (id) init
{
    if (self = [super init]) {
        [[NSNotificationCenter defaultCenter]
            addObserver:self
            selector:@selector(accountStatusDidChange:)
            name:ACAccountStoreDidChangeNotification object:nil];
    }
    return self;
}

- (void) accountStatusDidChange:(NSNotification *)notification
{
    if ([TWTweetComposeViewController canSendTweet]) {
        NSLog(@"app can still access Twitter account in iOS 5");
        NSLog(@"always hits this path in iOS 6");
    } else {
        NSLog(@"app permission removed by user in iOS 5");
    }
}

顺便说一句,canSendTweet上的文档是错误的。关闭开关后无法再访问 Twitter。

返回您是否可以发送 Twitter 请求。

是,如果可以访问Twitter并且至少设置了一个帐户;否则否。可用性

Available in iOS 5.0 and later.

在 TWTweetComposeViewController.h 中声明

4

3 回答 3

2

在 iOS 8 中,确定应用程序是否可以访问用户的 Twitter 帐户变得更加容易。

迅速

ACAccountStore().accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter).accessGranted

Objective-C

[[[[ACAccountStore alloc] init] accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierTwitter] accessGranted]

这将返回一个BOOL告诉您用户是否授予访问权限的信息。

于 2015-05-23T13:05:33.407 回答
1

对于iOS 6你需要使用Social.framework,你可以检查[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]

于 2013-04-08T04:46:09.480 回答
0

这个问题已经在这里回答了https://stackoverflow.com/a/12679828 答案基本上说这是最好的检查方法。

[self.accountStore requestAccessToAccountsWithType:accountType options:nil
                                                completion:^(BOOL granted, NSError *error)
         {
             if (granted == YES) { "continue" }

             else {
                 if ([error code] == 6) { 
                     //No accounts defined
                 }
                 else if (error == nil) {
                     //Your permissions are revoked
                 }
             }
于 2013-06-24T18:33:47.073 回答