SLComposeViewController:"No Twitter Accounts" 警报的不同行为取决于是否安装了 Twitter 应用程序
SLComposeViewController: Different behavior of "No Twitter Accounts" alert depending on whether or not Twitter app is installed
我在我的应用程序中使用以下代码进行 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 应用 ,我会收到以下警报:
它确实做了它应该做的事情,按 "Cancel" 关闭警报视图和 Twitter 撰写视图。按 "Settings" 也会关闭两个视图并打开设置。不错
现在,如果没有设置 Twitter 帐户,但安装了 Twitter 应用 ,我会收到以下警报:
请注意,没有 "Cancel" 和 "Settings" 按钮,只有一个 "OK" 按钮。如果按下,警报视图会消失,但 Twitter 撰写视图会保留在那里,并且 "Post" 按钮会变灰。因此,用户只能再次按 "Cancel" 来关闭撰写视图并自行转到设置。不太好。
请注意,在呈现 SLComposeViewController 之前是否检查服务可用性并没有什么区别:
[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter];
您知道吗,无论是否安装了 Twitter 应用程序,为什么会有这种行为差异?是否有办法获得相同的行为?
在 iOS 9.2.1、iPad Air(第二代)和 iPhone 6 Plus 上测试。
勾选 [this] (Opening the Settings app from another app)。
滚动到底部,有一个尚未被投票(奇怪地)包含图像的答案。
link 向您展示了如何导航到 settings/twitter 从您的应用程序。
下一步是研究使用 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 应用程序。
希望这有帮助。
我在我的应用程序中使用以下代码进行 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 应用 ,我会收到以下警报:
它确实做了它应该做的事情,按 "Cancel" 关闭警报视图和 Twitter 撰写视图。按 "Settings" 也会关闭两个视图并打开设置。不错
现在,如果没有设置 Twitter 帐户,但安装了 Twitter 应用 ,我会收到以下警报:
请注意,没有 "Cancel" 和 "Settings" 按钮,只有一个 "OK" 按钮。如果按下,警报视图会消失,但 Twitter 撰写视图会保留在那里,并且 "Post" 按钮会变灰。因此,用户只能再次按 "Cancel" 来关闭撰写视图并自行转到设置。不太好。
请注意,在呈现 SLComposeViewController 之前是否检查服务可用性并没有什么区别:
[SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter];
您知道吗,无论是否安装了 Twitter 应用程序,为什么会有这种行为差异?是否有办法获得相同的行为?
在 iOS 9.2.1、iPad Air(第二代)和 iPhone 6 Plus 上测试。
勾选 [this] (Opening the Settings app from another app)。 滚动到底部,有一个尚未被投票(奇怪地)包含图像的答案。 link 向您展示了如何导航到 settings/twitter 从您的应用程序。 下一步是研究使用 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 应用程序。 希望这有帮助。