You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Multiplatform应用中打开第三方移动应用?

关于Kotlin Multiplatform调用第三方应用的问题解答

1. 是否可以通过通用代码打开外部应用?

目前没有原生的KMM跨平台API能直接统一处理所有第三方应用唤起场景——毕竟Android和iOS的应用唤起机制底层逻辑差异很大(Android依赖Intent,iOS依赖URL Scheme/Universal Links)。但可以通过KMM的expect/actual模式封装一套通用接口,在共享代码层定义抽象的调用方法,然后分别在Android、iOS端实现具体逻辑。这样上层业务代码只需要调用统一的接口,无需关心平台差异,相当于实现了“通用调用”的效果。

2. 是否存在Android Intent的多平台等效方案?

没有直接对标Android Intent的跨平台API,但可以基于expect/actual机制自行封装一个类似Intent功能的通用组件。比如在共享模块中定义expect函数:

expect fun launchThirdPartyCall(appType: CallAppType, contactId: String)

然后在Android端用Intent实现actual方法:

actual fun launchThirdPartyCall(appType: CallAppType, contactId: String) {
    val intent = when(appType) {
        CallAppType.GoogleMeet -> Intent(Intent.ACTION_VIEW).apply {
            setClassName("com.google.android.apps.tachyon",
                "com.google.android.apps.tachyon.ContactsVideoActionActivity")
            data = Uri.parse("content://com.android.contacts/data/$contactId")
        }
        // 其他应用的Intent配置
    }
    context.startActivity(intent)
}

iOS端则用URL Scheme实现对应的actual方法,以此模拟Intent的跨平台调用能力。

3. 若必须分平台实现,iOS端如何打开外部应用?

iOS主要通过URL Scheme或Universal Links唤起第三方应用,以Google Meet为例:

  1. 确认目标应用的唤起规则:比如Google Meet支持通过meet:// Scheme发起通话,或者用Universal Link(如https://meet.google.com/相关链接)。具体参数格式需要参考对应应用的官方文档(比如Google Meet的通话链接格式)。
  2. 构造符合要求的URL:比如要呼叫特定联系人,可能需要拼接联系人的电话号码或邮箱,示例格式如meet://call?phone=+8613xxxxxxxxx。
  3. 在iOS端的actual实现中,使用UIApplication的open方法唤起应用,同时需要在Info.plist中配置允许查询的Scheme:
    • 首先在Info.plist添加LSApplicationQueriesSchemes数组,将用到的Scheme(比如meet、whatsapp)加入其中,否则系统会限制查询应用是否存在。
    • Swift实现示例:
      import UIKit
      
      actual fun launchThirdPartyCall(appType: CallAppType, contactId: String) {
          let urlString = when(appType) {
              .googleMeet -> "meet://call?phone=\(contactId)"
              // 其他应用的URL Scheme配置
          }
          guard let url = URL(string: urlString) else { return }
          if UIApplication.shared.canOpenURL(url) {
              UIApplication.shared.open(url, options: [:], completionHandler: nil)
          }
      }
      

内容的提问来源于stack exchange,提问作者Kai Dreyfus-Ballesi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:44:56