【发布时间】:2015-09-06 16:30:30
【问题描述】:
当通过 UIActivityViewController 在某些 url 上使用 Twitter 共享时,Twitter 共享对话框将显示,然后如果用户没有足够快地按下 post 则隐藏。这可以在不在模拟器中的 iPad 设备上重现。使用 Google Chrome 应用程序很容易显示一个简单的示例。
- 在 iPad 上打开谷歌浏览器
- 打开网址http://www.telegraph.co.uk/news/worldnews/middleeast/syria/11846382/Russia-is-building-military-base-in-Syria.html
- 点击分享按钮
- 选择推特
- Twitter 对话框弹出,现在等待 60 秒。注意 Twitter 对话框在用户按下帖子之前消失。右侧的图像也永远不会填充。
-
一个错误被记录到控制台:
viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo {Message=Service Connection Interrupted} plugin com.apple.share.Twitter.post interrupted plugin com.apple.share.Twitter.post invalidated
使用 URL http://apnews.myway.com/article/20150905/ml--syria-7872368035.html重复步骤 2-5
6. 请注意,在 60 多秒后,对话框仍处于打开状态,并且右侧的图像已解析为网页的一瞥。我认为 iPad 上存在一些问题,Twitter 无法解析某些 URL。
在原始 URL http://www.telegraph.co.uk/news/worldnews/middleeast/syria/11846382/Russia-is-building-military-base-in-Syria.html 的 iPhone 5 上重复步骤 2-5
6. 请注意,在 60 多秒后,对话框仍处于打开状态,并且右侧的图像已解析为网页的一瞥。在 iPad 上,同样的 URL 没有,我认为这是问题的一部分。
我用来在我的应用中分享的代码:
NSArray *myUrlArray = [[NSArray alloc] init];
NSURL *myUrl = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@", @"http://www.telegraph.co.uk/news/worldnews/middleeast/syria/11846382/Russia-is-building-military-base-in-Syria.html"]];
myUrlArray = @[myUrl];
NSMutableArray *applicationActivities = [[NSMutableArray alloc] initWithArray:myUrlArray];
UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:myUrlArray applicationActivities:applicationActivities];
[controller setCompletionWithItemsHandler:
^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
NSLog(@"Completed: %@", completed ? @"YES" : @"NO");
if(completed){
// Do Something
}
}];
NSArray *excludedActivities = @[UIActivityTypePostToWeibo,UIActivityTypePrint,
UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll,
UIActivityTypePostToFlickr,UIActivityTypePostToVimeo,
UIActivityTypePostToTencentWeibo, UIActivityTypeAirDrop];
controller.excludedActivityTypes = excludedActivities;
controller.popoverPresentationController.barButtonItem = //Add an anchor to a button bar item on your screen;
[self presentViewController:controller animated:YES completion:nil];
有没有其他人在使用 UIActivityViewController 通过 Twitter 分享时遇到这个问题,现在我能想出的唯一解决方案是制作自己的 Twitter 分享活动并使用它而不是内置的 Twitter 活动。不过,我真的更喜欢使用内置的 Twitter。
更新:如果我将 UIImage 作为数组中的第二项传入,则不会发生此问题。 Twitter如何从传入的URL生成图像似乎是一个问题。我目前的计划是自己制作 webview 的 UIImage 并将其传递给 Twitter 共享按钮,以便它不依赖 Apple/Twitter 来生成图像。
【问题讨论】:
-
解决方法:将 URL 转换为字符串并将其作为 NSString 传递给 UIActivityViewController,然后对话框不会关闭,但在键入推文时会向用户显示 URL。推文中的字符仍然相同,所以它有点让用户更全面地看到推文。我敢肯定有些人会抱怨,但稳定性比小缩略图 web 图标和没有 url 更好。
标签: ios twitter ios8 dialog ios9