iOSのホーム画面にブックマークアイコンを追加しようとしています。これを追加するには、Safari を介したユーザーの操作が必要であることを知っています。アプリで Safari で使用される html を生成する場合は、すべてデータ URI にエンコードする必要があります。私が抱えている問題は、データ uri を safari にロードすると、作成されたブックマーク (ホーム画面アイコン) がデータ uri をブックマークするため、ブックマークされている URL を何らかの方法で変更する必要があることです。実際のブックマークはアプリの URL スキームの一部になるため、アプリのセクションが開きます。ページに URL の html リンクを追加すると、クリックするとアプリが開くため、ブックマークできません。
サファリでブックマークされているURLをどうにかして変更する必要があります。
ボタンでテストするときに呼び出されるメソッドがあることを発見しましたがwindow.history.replaceState(“object or string”, “Title”, “/another-new-url”);
、これは何も変更しません。
URLを変更するためにこのコードを試しました:
<html>
<head>
<title>My App</title>
<script type="text/javascript">
function test(){
window.history.replaceState("object or string", "New Title", "myurlscheme://another-new-url");
}
</script>
<script type="text/javascript">
function back(){
window.history.back();
}
</script>
<script type="text/javascript">
function forward(){
window.history.forward();
}
</script>
</head>
<body>
<form>
<input type="button" onclick="test()" value="Change URL">
<input type="button" onclick="back()" value="back">
<input type="button" onclick="forward()" value="forward">
</form>
</body>
</html>
これをデータURIに変換すると、次のようになります。
data:text/html;charset=utf-8;base64,PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5NeSBBcHA8L3RpdGxlPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiB0ZXN0KCl7DQp3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoIm9iamVjdCBvciBzdHJpbmciLCAiTmV3IFRpdGxlIiwgIm15dXJsc2NoZW1lOi8vYW5vdGhlci1uZXctdXJsIik7DQogfQ0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBiYWNrKCl7DQogICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7DQp9DQo8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGZvcndhcmQoKXsNCiAgICAgd2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpOw0KfQ0KPC9zY3JpcHQ+DQoNCjwvaGVhZD4NCjxib2R5Pg0KDQogICAgPGZvcm0+DQogICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG9uY2xpY2s9InRlc3QoKSIgdmFsdWU9IkNoYW5nZSBVUkwiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJiYWNrKCkiIHZhbHVlPSJiYWNrIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZm9yd2FyZCgpIiB2YWx1ZT0iZm9yd2FyZCI+DQogICAgPC9mb3JtPg0KDQo8L2JvZHk+DQo8L2h0bWw+
Mac のサファリでこの URL をテストしても、test() ボタンをクリックしても何も起こりません。
ユーザーに「ホーム画面に追加」するためのサファリページを表示することでホーム画面のブックマークを生成できるアプリは他にもあるため、可能である必要があります。
サーバー上でアプリがサファリで開くことができるページを使用するという最悪のシナリオも検討していますが、php を使用しようとするheader("Location: myurlscheme://");
と、ユーザーにブックマークさせる代わりに、すぐにリダイレクトしてアプリを起動するだけです。