iTunes、App StoreへのリンクがSafariで開けないとき

公開: 2014-04-10 16:14
更新: 2016-04-29 06:02
iTunes(App Store)へのリンクを一括管理したいからリダイレクトさせてるんだけど
iPhoneのSafariからだと開けないなんてことがあります。aタグにtarget="_blank"を設定してるとダメみたい。

じゃぁ外せばいいじゃん

と思われるかもですけど、
「はずすとサイトから離脱しちゃうじゃまいか」とか
「呪われているので外せません」的な理由があってはずせなかったり。

例としてかみあぷのWebサイト(http://www.appps.jp/)のリンクを見てみましょう。
iTunes、App StoreへのリンクがSafariで開けないとき
マンガボックスのところのボタンアイコンの2つにiTunesへリダイレクトするリンクがついているのですが、
アイコンの方にはtarget="_blank"が入っています。ですのでSafariでアイコンの方をタップすると、
iTunes、App StoreへのリンクがSafariで開けないとき
ガショウィーン、サッ、ピタッと真っ白なページで止まってしまいます。
これはくまったくまった。売り上げにも影響しそうですね。

さてこれを半ば強引に解決する方法をさきほど発見しました。
独自にリダイレクトしている方用とbitlyなどの短縮URLを使ってる方用のがあります。



自分でリダイレクトしている場合の解決方法


PHPだったら、

header("Location: https://itunes.apple.com/jp/hoge/id00000?mt=8&uo=4&at=XXXXX");
みたいなことをやってると思うのでそのあとにJavaScript

function sleep(time) {
        var t1 = new Date().getTime();
        var t2 = new Date().getTime();
        while(t2 < t1 + time) {
                t2 = new Date().getTime();
        }
        return;
}
sleep(500);
を出力します。PHPだとこんな感じ

header("Location: https://itunes.apple.com/jp/hoge/id00000?mt=8&uo=4&at=XXXXX");
echo '<script>function sleep(time) {var t1 = new Date().getTime();var t2 = new Date().getTime();while (t2 < t1 + time) {t2 = new Date().getTime();}return;}sleep(500);</script>';
OSを判定してiOSだけのときに出すと良いですね。

何をしているかというと0.5秒スレッドを停止させています。sleepって奴です。
新しくページを開いたあとにスレッドを少し停止させるとちゃんとiTunes、App Storeへ遷移するのです。

なぜかって?

知らないよーん。



さて次

短縮URLサービス使っているのでサーバーサイドいじれない場合の解決方法


最初にあげたかみあぷの例ですね。
aタグの中にonclickでこんなJavaScriptをしかけましょう。

<a href="http://bit.ly/hoge" target="_blank" onclick="setTimeout(function(){ sleep(500); }, 100)">App Storeへ!</a>
sleepは先ほど用意したものです。リンクをタップした後、
setTimeoutで0.1秒遅らせてから0.5秒スリープさせます。こうするとちゃんと遷移します。

なぜかって?

知らないよーん。


さぁこれでかみあぷもほんの少し売り上げが上がるはず。
お礼にあっきぃの作ったiPhoneアプリを取り上げてくださいな〜。


ではでは♪


※ご利用は自己責任でねっ


この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。