SLComposeViewController:“无Twitter帐户”警报的不同行为取决于是否安装了Twitter应用程序

时间:2016-03-15 09:50:56

标签: ios objective-c twitter slcomposeviewcontroller

我在我的应用中使用以下代码进行Twitter共享:

SLComposeViewController *twitter = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[twitter setInitialText:@"some text"];

twitter.completionHandler = ^(SLComposeViewControllerResult result)
{
    // do something...
    [topViewController dismissViewControllerAnimated:YES completion:nil];
};
[topViewController presentViewController:twitter animated:YES completion:nil];

现在,如果没有设置Twitter帐户,并且未安装Twitter应用程序 ,我会收到以下警告:

enter image description here

它完全按照它应该做的,按“取消”关闭警报视图和Twitter撰写视图。按“设置”也会关闭两个视图并打开设置。好的。

现在,如果没有设置Twitter帐户,但安装了Twitter应用程序 ,我会收到以下警告:

enter image description here

请注意,没有“取消”和“设置”按钮,只有“确定”按钮。如果按下,警报视图将消失,但Twitter撰写视图将保持不变,“发布”按钮将显示为灰色。因此,用户再次按“取消”以关闭撰写视图并自行转到设置。不太好。

请注意,在呈现SLComposeViewController之前,我是否检查服务可用性没有区别:

[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter];

您知道吗,为什么行为存在这种差异,以及是否有办法获得相同的行为,无论是否安装了Twitter应用程序?

在iOS 9.2.1,iPad Air(第二代)和iPhone 6 Plus。

1 个答案:

答案 0 :(得分:1)

检查[this](Opening the Settings app from another app)。 滚动到底部,有一个答案尚未被投票(奇怪)包含图像。 链接显示如何导航到您的应用程序的设置/推特。 下一步是研究使用ACAccountStore,检查是否没有用户通过数组登录。

let accountStore = ACAccountStore()
let accountType = accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter)

accountStore.requestAccessToAccountsWithType(accountType, options: nil, completion: { (granted, error) in
if (granted) {
         let arrayOfAccts = accountStore.accountsWithAccountType(accountType)
         if (arrayOfAccts.count > 0) {
         //regular function of twitter
         }
         //else is when there are no accounts logged into twitter
         else {
         //bring up a custom UIAlertAction with two options; Cancel and Settings.
         //settings should use the openURL to prefs:root=TWITTER
         } 
}

当用户未登录Twitter并且未安装应用程序时,会模仿其工作方式,为您提供取消和设置。

至于为什么你得到不同的警报设置超出我的意义,它可能是iOS苹果的东西。

这一行:

[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter];

检查Twitter应用程序是否已安装。 希望这会有所帮助。