iOS 8 和 9 iPad 使用 UIActivityViewController 通过 Twitter 共享对话框在 60 秒内以 viewServiceDidTerminateWithError

Posted

技术标签:

【中文标题】iOS 8 和 9 iPad 使用 UIActivityViewController 通过 Twitter 共享对话框在 60 秒内以 viewServiceDidTerminateWithError 关闭【英文标题】:iOS 8&9 iPad Share via Twitter using UIActivityViewController dialog closes with viewServiceDidTerminateWithError within 60 seconds 【发布时间】: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 更好。 【参考方案1】:

这种情况发生在多个应用程序中这一事实强烈表明这不是您的应用程序的问题,您需要尽快让 Apple 知道发生了什么,以便他们修复它。

但因为不想给你留下这么短的答案,所以我以一首歌的形式详细说明:

If the operating system's broken,
and there's someone you feel like chokin',
don't give the engineer a hug;
file a bug, file a bug, file a bug.

If the sharing service crashes,
and all your hopes, it dashes,
don't stomp your phone into the rug;
file a bug, file a bug, file a bug.

When you find a good workaround,
how you hate bugreporter's UI,
but if your Radar's really sound,
they'll fix it before the pigs fly!

So when you see such bad behavior,
and you really need a savior,
don't ask your question with a shrug;
file a bug, file a bug, file a bug!
File a bug, file a bug, file a buuuuuug!
[At bugreporter dot apple dot coooooom]

谢谢。我会在这里整晚。

【讨论】:

它不会出现在 Safari 中,所以我认为这不是 Apple 的问题。我已经让 Twitter 知道,因为它是 TwitterKit 中的一个问题,我相信这是他们为 Apple 提供的 3rd 方应用程序。 Apple 让它在 Safari 中正常工作,所以我很确定这是一个 Twitter 问题,他们必须向 Apple 提供更新的 TwitterKit 来修复它。很可能 Apple 开发人员知道解决方案,但没有通知 Twitter。 啊。我假设 TwitterKit 是社交框架的一部分,而不是第三方框架。我的错。 dgatwood 你的诗成就了我的一天! (在我的应用程序中与这个错误斗争了很长时间之后)。北极熊我会试试你的解决方法。这也很有帮助。

以上是关于iOS 8 和 9 iPad 使用 UIActivityViewController 通过 Twitter 共享对话框在 60 秒内以 viewServiceDidTerminateWithError的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8、iOS 9、iOS 10 和 iOS 11 上的 UITabBar 的高度是多少?

UIActivityViewController在iOS 8 iPad上崩溃

iOS:iOS 9 上 iPad 的 TableViewCell 背景

iOS 9 Safari webkit 仅在 iPad 上崩溃(iPhone 工作正常)

通用 iOS 9.1 应用程序不兼容

Trigger.io:iOS 9 iPad 多任务处理错误