检查通过SLComposeViewController共享是否通过有限(或无)Internet连接成功的最佳方法

时间:2015-06-23 16:37:56

标签: ios iphone ios8-share-extension

Apple's documentation is clear使用SLComposeViewController与其他社交网络(如Twitter和Facebook)提供共享功能。

典型代码将使用isAvailableForServiceType来验证特定服务是否可用,然后向视图控制器添加完成处理程序,其中SLComposeViewControllerResult可以检查SLComposeViewControllerResultCancelled或{{ 1}},用于检查用户在显示共享视图后是否点按了“发布”按钮或“取消”按钮。

这里的问题是,如果您使用SLComposeViewControllerResultDone来验证用户是否发出了请求,那么您实际上并不会检查它是否成功,例如当用户有限或没有连接时。

我已尝试使用其中一个应用程序对此进行测试,并注意到SLComposeViewControllerResultDone常量仍然有效,即使启用了飞行模式,也无法提出请求。这意味着用户填写共享视图字段并点击“发布”并执行我的成功代码即使我应该检查以确保帖子确实成功。

目前,我认为最好的选择是使用标准可达性选项(as recommended here)检查Internet连接,如果连接不可用则禁用共享按钮,但我不确定是否是最好的解决方案,因为它没有考虑用户可以点击“发布”但实际请求不成功的有限连接。

我的问题是检测共享请求是否已成功完成的最佳方法是什么

1 个答案:

答案 0 :(得分:0)

然后您需要确保不在didSelectPost

中的下面写一行
[self.extensionContext completeRequestReturningItems:nil completionHandler:nil];

根据您的请求处理程序中的成功或失败,您可以在上面写一行,因此您的didSelectPost应该是这样的:

- (void)didSelectPost {
    NSExtensionItem *inputItem = self.extensionContext.inputItems.firstObject;
    NSItemProvider *attachment = inputItem.attachments.firstObject;
    if ([attachment hasItemConformingToTypeIdentifier:@"public.url"])
    {
        //NSString *strLink = [attachement loadItemForTypeIdentifier:@"public.url" options:nil completionHandler:nil];
        [attachment loadItemForTypeIdentifier: @"public.url"
                                       options: nil
           // make your request here
        }];
    }
}