web-dev-qa-db-ja.com

アプリが存在するかどうかを確認し、iOSでそのアプリを起動します

IOSをチェックして、別のアプリがインストールされて起動されたかどうかを確認する方法はありますか?メモリが私に役立つ場合、これは初期のバージョンでは不可能でしたが、これは変更されましたか?

74
Rob

実行可能ですが、注意が必要です。

FBやTwitterアプリなどのインストール済みアプリの起動は、カスタムURLスキームを使用して行われます。これらは、他のアプリとWebサイトの両方で使用できます。

これは独自のアプリでこれを行う方法についての記事です

ただし、URLがあるかどうかを確認するのは難しい場合があります。インストール済みのアプリを検出するアプリの良い例は、 Boxcar です。ここでのことは、BoxcarがカスタムURLの高度な知識を持っていることです。 canOpenURL:があることはかなり確信しています(99%)。したがって、事前にターゲットにしたいアプリのカスタムスキームを知っていると、実装が簡単になります。

これは部分的なリストです 確認できるより人気のあるURLの一部です。

ただし、アプリをスキャンしてURLを推測したい場合は、JB以外のデバイスでは実行できません。

ブログの投稿はこちら Bumpのスタッフが問題をどのように処理したかについて話します。

65
Doug Stephen

次のようなスクリプトがあります。

_<script type="text/javascript">
function startMyApp()
{
  document.location = 'yourAppScheme://';
  setTimeout( function()
  {
      if( confirm( 'You do not seem to have Your App installed, do you want to go download it now?'))
      {
        document.location = 'http://iTunes.Apple.com/us/app/yourAppId';
      }
  }, 300);
 }
</script>
_

このスクリプトをWeb(<a href="#" onclick="startMyApp()">Try to start MyApp</a>)から呼び出すと、スキーム「yourAppScheme」のアプリがデバイスにインストールされているかどうかを判断できます。

デバイスにインストールされ、「yourAppScheme」がデバイスに登録されている場合、アプリが起動します。アプリがインストールされていない場合は、iTunesからこのアプリをインストールするようユーザーに提案できます。

41
Ievgen

アプリがインストールされているかどうかを確認するには(例:クリア):

BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"clearapp://"]];

そのアプリを開くには:

BOOL success = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"clearapp://"]];
22
Gavin Hope

アプリがインストールされていない場合、エラーメッセージを非表示にします

Branch では、以下のコード形式を使用します。iframeはより多くのブラウザーで動作することに注意してください。アプリのURIとApp Storeリンクを単純に置き換えてください。

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript">
            window.onload = function() {
                // Deep link to your app goes here
                document.getElementById("l").src = "my_app://";

                setTimeout(function() {
                    // Link to the App Store should go here -- only fires if deep link fails                
                    window.location = "https://iTunes.Apple.com/us/app/my.app/id123456789?ls=1&mt=8";
                }, 500);
            };
        </script>
        <iframe id="l" width="1" height="1" style="visibility:hidden"></iframe>
    </body>
</html>

最初にCookieに依存し、フォールバックとしてのみJavaScriptリダイレクトに依存する2番目の可能性があります。ロジックは次のとおりです。

アプリを持たないユーザーがアプリへのリンクを最初にタップすると、そのユーザーは直接App Storeにリダイレクトされます。これは、リダイレクトを使用して、サーバーへの動的に生成されたページであるアプリへのリンクによって実現されます。 Cookieを作成し、バックエンドでIPアドレス、OS、OSバージョンなどの「デジタルフィンガープリント」を記録します。

ユーザーがアプリをインストールして開くと、別の「デジタル指紋」を収集してバックエンドに送信します。これで、バックエンドはリンクがインストールされたことを認識します。アプリに関連付けられたリンクへの以降のアクセスで、サーバーは、リクエストで送信されたCookieに基づいて、動的に生成されたリダイレクトページがApp Storeではなくアプリにつながることを確認します。

これにより、redirectいリダイレクトは回避されますが、さらに多くの作業が必要になります。

12
st.derrick

私の理解では、プライバシーの問題のため、アプリがデバイスにインストールされているかどうかはわかりません。これを回避する方法は、アプリを試して起動し、起動しない場合にユーザーにフォールバックURLをヒットさせることです。モバイルサファリエラーの発生を防ぐため、iframeに配置すると問題が解決することがわかりました。

ここに私が使用したコードのスニペットがあります。

<form name="mobileForm" action="mobile_landing.php" method="post">
        <input type="hidden" name="url" value="<?=$web_client_url?>">
        <input type="hidden" name="mobile_app" value="<?=$mobile_app?>">
        <input type="hidden" name="device_os" value="<?=$device_os?>">
    </form>
<script type="text/javascript">
        var device_os = '<? echo $device_os; ?>'; 


        if (device_os == 'ios'){

        var now = new Date().valueOf(); 
        setTimeout(function () { 
            if (new Date().valueOf() - now > 100) 
                return;

        document.forms[0].submit(); }, 5); 


        var redirect = function (location) {
            var iframe = document.createElement('iframe');
            iframe.setAttribute('src', location);
            iframe.setAttribute('width', '1px');
            iframe.setAttribute('height', '1px');
            iframe.setAttribute('position', 'absolute');
            iframe.setAttribute('top', '0');
            iframe.setAttribute('left', '0');
            document.documentElement.appendChild(iframe);
            iframe.parentNode.removeChild(iframe);
            iframe = null;
        };

        setTimeout(function(){
            window.close()
            }, 150 );

        redirect("AppScheme");
2
Adrian Phan

私は最近これに苦労しました、そして、ここに私が思いついた解決策があります。アプリが起動したかどうかを検出する確実な方法はまだないことに注意してください。

User-Agentを検出すると、iPhone固有のバリアントにリダイレクトするサーバーからページを提供します。そのページへのリンクは、メール/ SMSまたはFacebook。

ページは参照ドキュメントの最小バージョンをレンダリングしますが、非表示の<iframe>を使用して、読み込まれるとすぐにアプリを自動的に開こうとします(この状況ではAJAXは常に失敗します。これにはjQueryまたはXMLHttpRequestを使用できません)。

URLスキームが登録されている場合、アプリが開き、ユーザーは必要なすべてを実行できます。いずれにせよ、ページの下部に次のようなメッセージが表示されます。「アプリを起動しましたか?そうでない場合、おそらくまだインストールしていません。..」ストアへのリンクが表示されます。

1
user2117956