iOS 9.3.2 自定义 URL 方案未从 Safari 启动应用程序

Posted

技术标签:

【中文标题】iOS 9.3.2 自定义 URL 方案未从 Safari 启动应用程序【英文标题】:iOS 9.3.2 Custom URL Scheme not launching app from Safari 【发布时间】:2016-11-15 09:52:52 【问题描述】:

我的网页会检测操作系统和浏览器,如果是 ios,Safari 将使用自定义 URL 方案启动我的应用程序。

它在我的测试设备上运行良好,但我发现用户在 iOS/9.3.2 上使用 Safari/9.0 时出现问题 - 该链接根本不起作用!

是否不再支持自定义 URL 方案?我需要改用通用链接吗?

对于那些感兴趣的人,这里是我在 iOS 浏览器中使用的 javascript 代码(99% 的时间都在工作):

var timer;
var heartbeat;
var lastInterval;

window.addEventListener("pageshow", function(evt)
    clearTimers();
, false);

window.addEventListener("pagehide", function(evt)
    clearTimers();
, false);

function getTime() 
    return (new Date()).getTime();


// For all other browsers except Safari (which do not support pageshow and pagehide properly)
function intervalHeartbeat()

    var now = getTime();
    var diff = now - lastInterval - 200;
    lastInterval = now;
    if(diff > 1000)
     // don't trigger on small stutters less than 1000ms
        clearTimers();
    


function clearTimers()

    clearTimeout(timer);
    clearTimeout(heartbeat);


function intervalHeartbeat()

    if (document.webkitHidden || document.hidden)
    
        clearTimers();
    


function launch()

    lastInterval = getTime();
    heartbeat = setInterval(intervalHeartbeat, 200);
    timer = setTimeout(function ()
    
        logErrorToMyServer();
    , 2000);

    //Launch app via custom URL scheme
    window.location = "myapp://";

【问题讨论】:

【参考方案1】:

自 iOS 9.2 引入以来,自定义 URI 方案一直不是一个好的选择。 Apple 明确表示,通用链接是深度链接的首选方法。

我不知道有任何追溯性更改会导致 9.0 - 9.3.2 上的 Safari 在这种情况下什么都不做(您至少应该得到一个错误弹出窗口),但这在可预见的未来将继续不受支持,您应该尽快启动并运行 Universal Links。更多详情请见this blog post。

【讨论】:

以上是关于iOS 9.3.2 自定义 URL 方案未从 Safari 启动应用程序的主要内容,如果未能解决你的问题,请参考以下文章

为 iOS 应用程序定义 SSL 自定义 URL 方案

iOS 10 自定义 URL 方案不再有效

自定义 URL 方案 ios 9

在 QML 中获取自定义 iOS 方案的源 URL 的最佳方法

无法让自定义 url 方案在 iOS 中工作

使用自定义 URL 方案的 iOS 无缝 Facebook 登录体验