ios - 发现 UIActivityViewController 支持的所有端点,如微信、KaKao、Line 等?

标签 ios objective-c facebook ios7

This SO post解决如何通过排除 AirDrop 或打印等服务来自定义 UIActivityViewController。

它还提到了 this Apple doc其中突出显示了支持的股票服务,但我们如何识别其他支持的端点,如 Line 和其他消息传递应用程序?

具体来说:

(1) Skype、Kakao、Line、Viber、WeChat、Kik、WhatsApp 和 Facebook Messenger(不是 Facebook 本身)是否有端点?

(2) 这些终点是什么?

最佳答案

您目前无法在 iOS 7 上执行此操作,因为出于安全原因,尚无应用程序可以直接与其他应用程序通信。上届 WWDC 的亮点之一是引入了 extensions对于 iOS 8,这将使这成为可能;您可以在 Creating Action Extensions example 中阅读如何操作.

然而,有人试图解决这个问题。一个值得注意的例子是 IntentKit ,它通过拥有已知应用程序的存储库来工作。

What is IntentKit?

IntentKit is an open-source iOS library that makes it easier to link to other apps. It's sort of like Android's Intents or Windows Phone's Contracts.

此类尝试之一的另一个示例是 OvershareKit

Why OvershareKit?

Sharing is far too cumbersome to implement on iOS. UIActivityViewController is too limiting, and rolling your own library is too time-consuming. Most devs end up settling for underwhelming sharing options for lack of the time or inclination to make something better.

OvershareKit makes it trivial to add rich sharing options to your iOS apps.

如何知道应用程序是否已安装?

即使您无法发现它们。如果您知道您正在寻找的应用程序以及哪种应用程序 URL Scheme它会响应,然后您可以检查您的应用是否能够打开此类 URL。

这就是 IntentKit 的用途,它是有关应用程序、它们响应的 URL 方案以及它们可以执行的操作类型的知识库。随着扩展的引入。

例如,您可以通过检查是否可以打开 fb:// URL 来检查是否安装了 Facebook。

BOOL isFacebookInstalled = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fb://"]];

关于 IntentKit 的内部运作

在内部,IntentKit 会检查同样的事情,正如您在 INKActivity's implementation 中看到的那样:

- (BOOL)canPerformCommand:(NSString *)command {
    if (!self.actions[command]) { return NO; }

    if (self.presenter) {
        return [self.presenter canPerformAction:command];
    } else {
        NSURL *url = [NSURL URLWithString:[self.actions[command] urlScheme]];
        return [self.application canOpenURL:url];
    }
}

有关请求的 UIActivity 服务的信息:

解决方法

这些服务中的大多数都基于已知协议(protocol)或它们的细微变化。例如,您可以使用 XMPP (aka Jabber)直接发送消息到Facebook IMKik帐户;有人说 Viber 似乎使用了 SIP 的修改用于通过 VoIP 电话发信号。因此,您可以使用底层机制解决一些 SDK/API 限制。


SDK 还是 API?

如果您只需要向这些服务发送消息,我认为您实际上不需要通过 SDK 或 URL 方案与已安装的应用程序进行通信,我无法测试 Big你提到的表情符号应用程序,因为它只是在 iOS 8 上崩溃,但如果它使用服务 API,你可以使用 Charles 轻松解决它或 Wireshark .

关于ios - 发现 UIActivityViewController 支持的所有端点,如微信、KaKao、Line 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24899907/

相关文章:

ios - 如果条件为真,如何转移到特定的 Storyboard?

ios - XCode 不接受我的 CLLocationCoordinate2D。说 "invalid region"

ios - UICollectionView 在 iOS 11 上覆盖全屏

ios - 将照片上传到 Facebook 粉丝专页

ios - 一个 Bundle ID 的多个推送证书

ios - 从后台线程更新 UIProgressView 进度

objective-c - 使用 Cocoa 获取无法挂载的驱动器列表

facebook - 如何将 "Go to App"按钮添加到现有页面

IOS 9 Swift - 解析 Facebook 登录不打开 native Facebook 应用程序

ios - 如何在不按下 iOS 按钮的情况下更改 UIButton 标题/颜色?