私の質問はiOS9のみです!
HTML
ランディングページがあり、アプリがインストールされている場合、URLスキームを介してユーザーをアプリにリダイレクトしようとします。それ以外の場合は、Appstoreにリダイレクトします。
私のコードは:
document.addEventListener("DOMContentLoaded", function(event) {
var body = document.getElementsByTagName('body')[0];
body.onclick = function () {
openApp();
};
});
var timeout;
function preventPopup() {
clearTimeout(timeout);
timeout = null;
window.removeEventListener('pagehide', preventPopup);
}
function openApp(appInstanceId, platform) {
window.addEventListener('pagehide', preventPopup);
document.addEventListener('pagehide', preventPopup);
// create iframe
var iframe = document.createElement("iframe");
document.body.appendChild(iframe);
iframe.setAttribute("style", "display:none;");
iframe.src = 'myscheme://launch?var=val';
var timeoutTime = 1000;
timeout = setTimeout(function () {
document.location = 'https://iTunes.Apple.com/app/my-app';
}, timeoutTime);
}
問題は、iframe
トリックがSafari
iOS9
で機能しないことです。
理由は何ですか?
this answerに基づく私のiframe
トリック。
Iframeのトリックはもはや機能しません-私の推測ではAppleはより多くの開発者がより迅速にユニバーサルリンクを実装することを奨励することを知っています。
window.location='your-uri-scheme://';
および500ミリ秒後にApp Storeにフォールバックします。 Branch で行うように、このアプローチをとる場合、ポップアップ間に「ダンス」があります(ユニバーサルリンクが機能しない場合はフォールバックとして行います)。
window.location = 'your-uri-scheme://'; // will result in error message if app not installed
setTimeout(function() {
// Link to the App Store should go here -- only fires if deep link fails
window.location = "https://iTunes.Apple.com/us/app/myapp/id123456789?ls=1&mt=8";
}, 500);
私はあなたのためにより良い答えがあればいいのに。 iOS 9は間違いなくより制限されています。
ユニバーサルリンクに必要なものの有用な概要については、私のルートをご覧ください here または このチュートリアルを読む
すでに述べたように、設定window.location
はiOS 9でも動作します。ただし、これにより[アプリで開く]ダイアログが表示されます。 https://bartt.me/openapp に例を挙げました:
詳細については、 https://lab.bartt.me/openapp のソースをご覧ください。
ユニバーサルリンクへのアプリのサポートをお試しください
アイデア:Safariでカスタム(JavaScript、iframe)ソリューションを避け、サポートされているユニバーサルリンクでコードを置き換えます。
例
<html>
<head>
...
</head>
<body>
<div class"app-banner-style">
<a href="http://yourdomain.com">In app open</a>
</div>
...content
</body>
</html>
アプリがユニバーサルリンク(yourdomain.comなど)をサポートしている場合は、ドメイン(およびパス)を設定し、iOS9がそのリンクに反応してアプリを開く必要があります。 それは理論にすぎません、しかし私はうまくいくはずです:)
iframeハックはios9ではもう機能しません。可能な解決策は、2つのボタンを使用することです。例:
$('#goToStoreBtn').text( "go to store" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = storeUrl; // https://iTunes.Apple.com/...
});
$('#goToAppBtn').text( "go to app" ).click(function(event){
event.preventDefault();
event.stopPropagation();
window.location = appUrl; // myApp://...
});