web-dev-qa-db-ja.com

インストールされている場合はアプリケーションにリダイレクトし、そうでない場合はApp Storeにリダイレクトする

カスタムスキーム(例:so://)を登録することでiOSのアプリに直接リンクできること、そしてiTunes経由でアプリストアのアプリにリンクすることもできます。

多くの場合、理想的なフローは、インストールされているアプリifにリダイレクトするリンクを提供することです。これは可能ですか?もし可能なら、どのように?

わかりやすくするために追加、シナリオは、アプリケーションのグループに参加するよう招待するiPhoneの電子メールからリンク(http)を開いています。ユーザーがそのデバイスにアプリをインストールしている場合は開く必要があります。そうでない場合は、httpリンクがiTunesにリダイレクトされます。

58
ConfusedNoob

これを確認する方法はありません。ただし、ニースの回避策があります。

基本的にこれは次のとおりです。

  1. アプリを初めて開くときは、アプリ内からサーバー上の事前定義されたURLへのモバイルサファリを開きます
  2. そのURLで、ユーザーのモバイルサファリにappInstalledのようなCookieを設定します
  3. 次に、登録されたスキームでユーザーをアプリにキックバックします(FBがSSOで行うのと同じです)
  4. すべてのメールリンクはあなたのウェブサイトを指しますが、ウェブサイトではブラウザがモバイルSafariかどうか、appInstalled Cookieが存在するかどうかを確認します
  5. ブラウザがモバイルSafariでないか、Cookieが見つからない場合は、AppStoreにリダイレクトするか、Webページにとどまります。
  6. #4の条件が当てはまる場合、登録されたスキームでユーザーをアプリにリダイレクトします
  7. ユーザーによってアプリが削除され、カスタムURLスキームが失敗した場合、アプリストアへのフェイルセーフリダイレクトがあります

最後の2つの手順について説明します このSO post

26
Lefteris

より簡単な答えは、次のJavaScriptを使用してサーバーにページを設定することだと思います。

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myapp://");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

これは基本的にアプリにリダイレクトを試み、失敗した場合にタイムアウトを設定してアプリストアにリダイレクトします。

コードをもう少しスマートにし、ユーザーエージェントをチェックして、iosユーザー、Androidユーザー、またはWebユーザーかどうかを確認し、適切にリダイレクトします。

52
BananaNeil

iframeにアプリのカスタムスキームが設定されたsrcを含むWebページを含むメールからリンクするWebページがある場合、iOSは自動的にその場所にリダイレクトしますアプリアプリがインストールされていない場合、何も起こりません。これにより、アプリがインストールされている場合はアプリにディープリンクでき、インストールされていない場合はApp Storeにリダイレクトできます。

たとえば、Twitterアプリをインストールしていて、次のマークアップを含むWebページに移動すると、すぐにアプリに移動します。 Twitterアプリをインストールしていない場合、「The Twitter App is not installed」というテキストが表示されます。

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="Twitter://" width="0" height="0"></iframe>
        <p>The Twitter App is not installed</p>
    </body>
</html>

以下は、アプリがインストールされていない場合にアプリストアにリダイレクトするより完全な例です。

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    <script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
    <script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
    <script>
      (function ($, MobileEsp) {
        // On document ready, redirect to the App on the App store.
        $(function () {
          if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
            // Add an iframe to Twitter://, and then an iframe for the app store
            // link. If the first fails to redirect to the Twitter app, the
            // second will redirect to the app on the App Store. We use jQuery
            // to add this after the document is fully loaded, so if the user
            // comes back to the browser, they see the content they expect.
            $('body').append('<iframe class="Twitter-detect" src="Twitter://" />')
              .append('<iframe class="Twitter-detect" src="itms-apps://iTunes.com/apps/Twitter" />');
          }
        });
      })(jQuery, MobileEsp);
    </script>
    <style type="text/css">
      .Twitter-detect {
        display: none;
      }
    </style>
    </head>
    <body>
    <p>Website content.</p>
    </body>
</html>
13
q0rban

「Smart App Banners」-いつ登場したかはわかりませんが、同じ投稿を探してこの投稿を見つけた後、Smart App Bannersをフォローアップします。

スマートアプリバナーは、ウェブエクスペリエンスでアプリを提供する各ページのヘッダーにある1行のHTMLメタタグです。

<meta name="Apple-iTunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

このアイコンはページの上部に表示され、アプリまたはApp Storeへのルーティングのいずれかで[このページを開く]が表示されます。

enter image description here

IPhone上のこのページのメタデータは次のようになります(もちろん匿名化されています)。

<meta name="Apple-iTunes-app" content="app-id=605841731, app-argument=lync://confjoin?url=https://meet.rtc.yourcorporatedomain.com/firstName.lastName/conferenceID">

Apple開発者向けドキュメント-スマートアプリバナーを使用したアプリの宣伝

8
William Cerniuk

とても簡単です。これを開くには、plistで宣言されたURLスキームを持つアプリを開く必要があります。

//if you can open your app
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"yourapp://"]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"yourapp://"]];
}
else
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"ituneappstorelink"]];
}
7
rooster117

ここには多くの複雑なEdgeのケースがありますので、最も簡単な解決策は他の誰かにそのようなものを処理させることです。

これが https://branch.io/ の動作です。彼らの無料プランを使用して、ほんの一握りのボーナス機能を使用して、あなたが望むものを正確に達成することができます

  • 統計
  • リンクとともに情報を渡すことができ、ユーザーが最初にインストールを行う必要があった場合でも取得されます
  • リンクはデスクトップで機能します(デフォルトでは、モバイルへのインストールリンクをテキストで送信します)

Branch.ioとは提携していませんが、Branch.ioの製品を使用しています。

2
Confused Vorlon

このアクションを達成するためのいくつかの簡単なステップがあります

ステップ1

移動->プロジェクト(ターゲットを選択)->情報-> URLタイプ

enter image description here

XcodeでURLスキームを作成する

enter image description here ここでURLスキームはmyAppです(すべての文字を小文字にする方が良いです)。

ステップ2

URLからパラメーター/クエリ文字列を受信する予定がある場合は、デリゲートを設定します

コードは次のとおりです。

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

     NSLog(@"APP : simple action %@",url.scheme);

    if ([url.scheme hasPrefix:@"myapp"]) {

        NSLog(@"APP inside simple %@",url.absoluteString);


        NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:url
                                                    resolvingAgainstBaseURL:NO];
        NSArray *queryItems = urlComponents.queryItems;
        NSString * abc = [self valueForKey:@"abc"
                           fromQueryItems:queryItems];
        NSString * xyz = [self valueForKey:@"xyz"
                           fromQueryItems:queryItems];


        NSLog(@"Sid up = %@", abc);

        NSLog(@"PID up = %@", xyz);

      // you can do anything you want to do here



        return YES;
    }
return NO;
}

Xcode側の作業の終了。

ステップ3

私はフロントエンドガイではないので、ここで@BananaNeilコードを参照する

(function() {
  var app = {
    launchApp: function() {
      window.location.replace("myApp://share?abc=12&xyz=123");
      this.timer = setTimeout(this.openWebApp, 1000);
    },

    openWebApp: function() {
      window.location.replace("http://itunesstorelink/");
    }
  };

  app.launchApp();
})();

それがあなたのすべてを助けることを願っています

2