问题反馈 · Cardz × Yaichi · 2026-09-25

iOS 版 Yaichi App 内,Cardz 页面无法跳转 WhatsApp 群组

iOS:无法跳转(已录屏)Android:正常
现象(iOS)

在 App 内点「加入群组」→ App 里打开了 WhatsApp 网页 → 再点就白屏,WhatsApp 没有被唤起。

对照(Android)

同一页面、同一链接,在 Android 版 Yaichi App 内可以正常跳转并入群。

原因

iOS WKWebView 默认不会把 WhatsApp 链接交给系统打开,需要 App 端处理。

请求

在 iOS WebView 放行 WhatsApp 链接(约 10 行代码),或提供「外部打开」JS bridge。

复现(iPhone)

Yaichi App 首页 Cardz 入口
1Yaichi App → Cardz
Cardz 加入 WhatsApp 群组弹窗
2点「加入 WhatsApp 群組」
WhatsApp 邀请网页在 App 内打开
3App 内打开了 WhatsApp 网页
点击后白屏
4再点 → 白屏

原视频 22 秒(iPhone)。第 11 秒点加入,第 14 秒起白屏。

环境结果
iOS · Yaichi App 内白屏,无法跳转
Android · Yaichi App 内正常跳转入群

原因

iOS WKWebView 默认只处理 http/https 页面导航:

Android 端正常,说明 Android WebView 已经把这类链接交给系统处理;iOS 端需要做同样的处理。

需要 Yaichi 处理(二选一)

A. 已有 JS bridge?如果 App 已有「用系统 / 外部浏览器打开 URL」的方法,请告诉我们方法名和调用方式,我们在页面里调用即可,无需发版。

B. 修改 iOS WebView:在 decidePolicyFor navigationAction 中,把非 http/https 链接以及 chat.whatsapp.com / wa.me 交给系统打开。需要发新版。

iOS · WKNavigationDelegate (Swift) · 参考实现
func webView(_ webView: WKWebView,
             decidePolicyFor action: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    guard let url = action.request.url else { return decisionHandler(.allow) }
    let scheme = url.scheme?.lowercased() ?? ""
    let host = url.host?.lowercased() ?? ""
    let externalHosts: Set<String> = ["chat.whatsapp.com", "wa.me", "api.whatsapp.com"]

    if !["http", "https", "about", "data", "blob"].contains(scheme) || externalHosts.contains(host) {
        UIApplication.shared.open(url)
        return decisionHandler(.cancel)
    }
    decisionHandler(.allow)
}

如果 App 对 window.open / target="_blank" 有单独处理(createWebViewWith),同一规则也需要加上。

麻烦回复
  • 采用 A 还是 B;如果是 A,bridge 的方法名和用法
  • 如果是 B,预计上线的 iOS 版本和时间