11

我正在使用 TWTweetComposeViewController 访问用户的 Twitter 帐户,他/她已在“设置”->“Twitter”中添加了该帐户。当应用程序尝试访问 Twitter 帐户时,它应该会显示一条警报,其中包含类似以下的消息:

"[AppName] Would Like Access to Twitter Accounts"

您可以点击“不允许”或“确定”。我想这是操作系统本身显示的警报,因为点击“确定”实际上可以访问 Twitter。

当我在 iOS 5.x 设备上测试时会显示上述警报,但在 iOS 6 设备上测试时并非如此。我希望在我发送以下消息时显示警报,但我尚未在设置中获得我的应用程序对 Twitter 的访问权限:

[TWTweetComposeViewController canSendTweet]

如上所述,它不会发生。有谁知道这是否是 iOS 6 中的一个已知错误?我一直无法在 SO 上找到任何帖子,因为我找不到其他不同行为的原因,我认为这是一个错误。

仅供参考,我正在以下两种设备上进行测试:

  • 装有 iOS 5.1 的 iPhone 4
  • 装有 iOS 6.0 的 iPhone 4

更新

我使用DETweetComposeViewController,它通过以下方式检查 iOS 5:

+ (BOOL)de_isIOS5
{
    return (NSClassFromString(@"NSJSONSerialization") != nil);
}

但是由于 NSJSONSerialization 类也出现在 iOS 6 中,所以这不应该是原因。

4

1 回答 1

30

我整天都在 iOS 5.1 和 iOS 6.0 上整理同样的事情。

只要在“设置”中配置了 Twitter 帐户,我的应用程序在 iOS 6.0 中不再要求 Twitter 访问权限只是为了显示一个TWTweetComposeViewController. 我已经通过手动关闭我的应用程序的 Twitter 访问来验证这一点Settings > Privacy > Twitter。关闭访问后,我被正确地拒绝了使用 TWRequest 创建友谊的能力,但仍然可以弹出TWTweetComposeViewController. 在我授予它访问权限之前,我每次都会在 iOS 5.1 中收到提示。

这对我来说很有意义。所做TWTweetComposeViewController的只是启动推文,因此如果用户已经配置了设备范围的 Twitter 帐户,则该权限应该足以从任何地方发送推文。必须在每个应用程序的基础上授予访问权限确实是一个不必要的额外步骤。

如果尚未配置 Twitter 帐户,TWTweetComposeViewController将提示此消息:

No Twitter Accounts
There are no Twitter accounts
configured. You can add or create
a Twitter account in Settings.

带有方便的按钮“设置”和“取消”。

附注:iOS 6 也仅"[AppName] Would Like Access to Twitter Accounts"在应用程序第一次请求访问时提示消息。

之后,您必须重置Settings > General > Reset > Reset Location & Privacy以获取询问提示。即使您删除并重新安装/重建应用程序,“已经询问过一次”设置仍然存在。您可以在 中手动启用访问Settings > Privacy,但重置是让提示重新显示的唯一方法(如果这对您的测试很重要)。

我发现了两件额外的事情。在 的完成块中[ACAccountStore requestAccessToAccountsWithType:options:completion:],如果granted == NO

  1. 如果[error code] == 6,您的用户没有定义帐户。
  2. 如果error == nil,您的用户刚刚或以前拒绝访问您的应用程序。如果之前发生过,该请求会被静默忽略,屏幕上不会显示任何警报,也不会点击“不允许”按钮。
于 2012-10-01T19:35:15.473 回答