发现UIActivityViewController支持的所有端点,如WeChat,KaKao,Line等?

 城隍山人因 发布于 2023-01-01 16:36

这篇SO帖子解决了如何通过排除AirDrop或打印等服务来自定义UIActivityViewController.

它还提到这个Apple文档突出了支持的股票服务,但我们如何识别其他受支持的端点,如Line和其他消息应用程序?

特别:

(1)Skype,Kakao,Line,Viber,WeChat,Kik,WhatsApp和Facebook Messenger(不适合Facebook)有终点吗?

(2)这些终点是什么?

1 个回答
  • 您目前无法在iOS 7上执行此操作,因为出于安全原因,任何应用程序都无法直接与其他应用程序通信.最后一个WWDC的亮点之一是引入了iOS 8的扩展,这将使这成为可能; 您可以阅读创建动作扩展示例中的内容.

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

    什么是IntentKit?

    IntentKit是一个开源的iOS库,可以更轻松地链接到其他应用程序.这有点像Android的Intents或Windows Phone的合约.

    其中一个尝试的另一个例子是OvershareKit

    为何选择OvershareKit?

    在iOS上实现共享非常麻烦.UIActivityViewController限制太多,滚动自己的库太耗时了.由于缺乏时间或倾向于做出更好的事情,大多数开发者最终都会选择平庸的分享方式.

    OvershareKit为您的iOS应用添加丰富的共享选项变得微不足道.

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

    即使你无法发现它们.如果您知道要查找的应用程序以及它响应的URL方案,那么您可以检查您的应用是否能够打开这种类型的URL.

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

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

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

    关于IntentKit的内部运作

    在内部,IntentKit将检查同样的事情,你可以在INKActivity实现中看到:

    - (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服务的信息:

    Skype使用"skype:"URI,官方文档中的更多信息

    Kakao&Line,带有DCActivity(Kakao似乎有官方API,但文档在韩国)

    线,带LINEActivity

    WeChat,带有WeixinActivity(还有一个官方API,您可以使用它来制作自己的UIActivity)

    WhatsApp使用"whatsapp:"URI,官方常见问题解答中的更多信息,WhatsApp还有各种UIActivity实现,请在cocoapods.com上查看它们

    Facebook Messenger使用"fb-messenger:"URI,tia的其他答案中的更多信息,也看到了解决方法.

    Kik有一个公共API,但我知道没有SDK或UIActivity实现.另外,请参阅变通方法.

    Viber没有SDK也没有公共API,请参阅解决方法.

    解决方法

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


    SDK或API?

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

    2023-01-01 16:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有