web-dev-qa-db-ja.com

iOS9:ユニバーサルリンクが機能しない

だから私はチュートリアルに従いました https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-Apple-ios-9 そしてまったく同じものを使用します提供される値。

Apple Associationファイルもリンクディレクトリに用意されています:WEB_PAGE:PORT_NUMBER/Apple-app-site-association

すべてがこちらに設定されているようです。

資格を追加し、プロビジョニングプロファイルを更新し、すべての設定を完了しました。

デバイスでアプリを実行し、リンク http:// WEB_PAGE:PORT_NUMBER を開くと、常にSafariが開きます。

次のメソッドにもブレークポイントがあります。

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

しかし、ジルチ。

誰かがこれを完成させましたか?逃したものはありますか?

92
Legolas

いくつかの問題が考えられます。

  1. このリンクバリデータにドメインを貼り付けて、問題がないことを確認してください。 https://limitless-sierra-4673.herokuapp.com/ (ShortStuffSushiのクレジット- repo

  2. 資格で指定されたドメインでTLSが適切に設定されていない場合、iOSはシステムログにエラーメッセージを記録します。アプリケーションログではなく、OSログに埋もれています。エラーメッセージはSep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/Apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErrのようになります。 here から引き出されたエラーメッセージ、TLSでCloudFlareを使用するためのクイック(不完全な)指示 here

  3. 私の個人的なテストでは、Safariのリンクをクリック/入力しても、一度もアプリを直接開いたことはありません。他のアプリ(iMessage、Mail、Slackなど)からのクリックは機能しました。他の人は、Google検索結果のリンクをクリックすると、アプリが直接開かれたと報告しています。

  4. ユニバーサルリンクがアプリを開くことに成功し、(アプリのナビゲーションバーの右上隅にあるサイトをタップすることで)クリックしてSafariにアクセスすると、iOSがアクセス時にアプリを開くのを停止することに注意してくださいそのURL。次に、Safariでプルダウンして、ページの上部に「開く」と表示されたバナーを表示できます。 これに多くの時間を費やしました。サイトへのクリックスルー=> ULの無効化は、パスに基づいてパス固有と思われることに注意してくださいApple-app-site-assocationファイルで指定します。そのため、yoursite.com/a/*yoursite.com/b/*の別々のルートがある場合、yoursite.com/a/*をクリックしてアプリを直接開くと、アプリの右上隅にyoursite.com/a/*にクリックスルーするオプションがあります。そうすると、その後のyoursite.com/a/*へのアクセスは、アプリではなくブラウザで開きます。ただし、yoursite.com/b/*は影響を受けず、アプリを直接開きます。

問題が何であるかを発見したら教えてください。個人的には、ユニバーサルリンクがどのように機能し、どのようなエッジケースが存在するかについて非常に興味があります。がんばろう。

172
st.derrick

これがうまくいかないことはたくさんあります。 2つのポイントが問題を引き起こしました。

  • Xcodeでは、Associated Domainsエンタイトルメントを追加するとき、各エントリはapplinks:で始まり、次にドメイン名が必要です。例えば。 applinks:www.Apple.com

  • Xcodeは資格ファイルを作成しましたが、ビルドには含まれていませんでした。手動でそのボックスをクリックする必要がありました。

はい、そうすると、Apple-app-site-associationファイルに署名する必要はありませんでした。これはプレーンテキストであり、HTTPSを介して提供される限り機能します。 (ただし、iOS 8をサポートしている場合は、引き続き署名する必要があります。)

55
DFedor

ユニバーサルリンクの関連付けファイルの作成に関するドキュメント に間違いがあるようです。

それが言うところ:

AppIDキーの値は、アプリのチームIDとバンドルIDです

それは言うべきです

AppIDキーの値は、アプリのプレフィックスとバンドルIDです

ほとんどのアプリでは、チームIDとアプリのプレフィックスは同じように見えますが、アプリが長年ストアに存在している場合、これらの値は異なる可能性があります。

この値を見つけるには、 https://developer.Apple.com でメンバーセンターを開き、「証明書、識別子、プロファイル」を見て、表の「識別子」、「アプリID」の順にクリックします。 「識別子」の下。アプリを見つけて、プレフィックス値とバンドルIDを使用して、関連付けファイルのAppIDを作成します。

29

St.derrick's Answer は参考になります。

ただし、サファリではなくアプリでユニバーサルリンクを再度有効にするには、次のことを行う必要があります。

  • MailまたはiMessageのユニバーサルリンクを長押しすると、safariまたはアプリで開くかどうかのオプションが表示されます。
23
Praveen

サーバー側でApple-app-site-associationを検証するには、Appleの公式バリデーターを使用できます。

https://search.developer.Apple.com/appsearch-validation-tool/

21
Devy

この問題のデバッグを支援するには、アプリのインストール時にデバイスのコンソール出力で「swcd」を検索して、ユニバーサルリンクの登録が機能したか失敗したかを確認します。

  1. シミュレーターではなく、実際のデバイスを使用してください。
  2. デバイスからアプリを削除します。
  3. デバイスをコンピューターに接続し、デバイスのコンソール出力をxcodeで表示します。 (ウィンドウ->デバイス-> [デバイス]->デバイスログの表示)。このウィンドウを開いたままにします。
  4. アプリをインストールして起動します。
  5. コンソール出力を「swcd」にフィルターします。成功した場合は、次のスクリーンショットのようなものが表示されます。失敗した場合は、別のものが表示されます。何も表示されない場合は、Associated Domainsエンタイトルメントを追加するなどの基本的なことを台無しにしています。

Applink added successfully

19
mpoisot

私にとっての問題は、ルートディレクトリa(例:http://example.com/)へのリンクではアプリが開かないことですが、パス(例:http://example.com/mypath)を追加しても機能することです。 "/"をパスリストに追加すると解決しました。

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "*", "/" ]
            }
        ]
    }
}

Slutskerが this Apple Developer Forumsスレッドで回答したとおり。

15
tidbeck

ユニバーサルリンクが正しく実装されているかどうかを確認するための簡単な手順。

  • アプリを起動する予定のリンクを長押しします。コンテキストメニューに[[アプリ名]で開く]が表示されます。

  • Notesアプリを開き、アプリを開くためのリンクを入力します。完了をタップします。リンクが黄色に変わり、リンクをタップすると、Safariではなくアプリが開きます。

  • リンク http://yourDomain.com がアプリを起動しない場合は、 http://yourDomain.com/yourFolder/ を試してください。

  • Safariでは、コンテキストメニューにsafariで[[アプリ名]で開く]と表示されているが、リンクをタップするとアプリを起動する代わりにsafari自体でリンクが開く場合、

    a。 「プルして更新」のように、リンクがクリックされたときに開いたサファリページをプルダウンしてみてください。アプリを開くことができるバナーが表示されます。バナーをタップしてアプリを開き、ホームボタンを押してアプリを閉じ、サファリに戻って、もう一度リンクをタップしてアプリを起動してみてください。今回は、バナーをタップすると、アプリでリンクを開くための設定が保存されているはずなので、アプリが起動します。

    b。手順a。の後もアプリが起動しない場合は、Gmailなどのウェブメールへのリンクをメールで送信し、safariでウェブメールサイトを開いて、リンクをクリックしてみてください。これが機能する場合、リンクと同じドメインからアプリを起動しようとしている可能性があります。私が見たものから、同じドメインからのアプリの起動はほとんど失敗します。リンクがユーザーと同じドメインにある場合、おそらくサファリはリンク先URLがユニバーサルリンクであるかどうかをチェックしません。そのため、別のドメインからアプリを起動してみてください。

15
Nikhil Mathew

ユニバーサルリンクを統合した後、プロジェクトバージョンまたはビルド番号を増やすことも非常に重要です。削除/再インストールしても、バージョンを上げるまでiOSはリンクを取得しません。

10
Kyle Truscott
  • ブラウザーのURLフィールドにリンクを貼り付けると、ユニバーサルリンクは機能しません。

  • ユニバーサルリンクworkユーザーが駆動する<a href="...">要素を使用して、ドメイン間でをクリックします。例:google.comにbnc.ltを指すユニバーサルリンクがある場合、アプリを開きます。

  • ユニバーサルリンクは動作しません同じドメインでユーザー駆動の<a href="...">要素をクリックします。例:google.comの別のユニバーサルリンクを指すgoogle.comのユニバーサルリンクがある場合、アプリは開きません。

  • ユニバーサルリンクは、ユーザーアクションの一部でない限り、Javascript(window.onload内または<a>要素の.click()呼び出し)を介してトリガーできません。

ソース: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links

3番目の弾丸は、理解するのに約1日かかりました。

8
guido

ここの人々が他のソリューションを探している場合、多くの問題がポップアップ表示され、多くの頭痛の種を引き起こしているのを見て、Universal Linksをデバッグするための段階的な手順をまとめました。

見てみな:

ユニバーサルリンクデバッグガイド

Debugging Guide preview

ユニバーサルリンクを新しく設定するだけの場合、このガイドは非常に役立ちます。

iOSディープリンク設定ガイド

彼らが役立つことを願っています!

7
Chris Maddern

最も一般的な原因は、ユーザーが右上をタップして、iOSに今後アプリ(この場合はUber)を開かないように指示することです。

修正するには、プルダウンしてスマートバナーを表示し、[開く]をタップします。

Pull down in Safari, and OPEN again

これにより、アプリを開くことが「記憶」されます。

5
samwize

もっと多くの人が将来私と同じ問題に遭遇した場合に備えて、私が発見したものをいくつか追加すると思いました。これらは主に認証エラーに関連しています。

Appleには明示的に記述されていませんが、Apple-app-site-associationファイルは、たとえ署名されていてもhttps経由で提供する必要があります。 httpsに使用される証明書もAppleによって信頼されている必要があります。そのため、[設定]-> [全般]-> [プロファイル]でデバイスに証明書を追加すると、safariでhttpsが許可されますが、ユニバーサルリンクは機能しません。

デバイスログでは、デバイスとサーバー間の認証エラーで、"TrustResultValue" : 4のような値が出力されます。 TrustResultValueの5は、証明書が間違ったドメイン用であることを意味します(たとえば、www.test.comから提供されるtest.com)。 TrustResultValueが4の場合、証明書はこの使用に対して信頼されていません。

デバッグに役立つ手順がいくつかあるかもしれません here 。 「Apple-app-site-associationへのアクセスのテスト」セクションは、デバイスがApple-app-site-associationファイルを取得していることを確認する方法のステップバイステップガイドです。手順は次のように要約されます。

  1. アプリをアンインストールします。ファイルはインストール時にダウンロードされるため、これが必要です。

  2. サーバーがApple-app-site-associationを適切に提供しないようにします。

  3. Xcodeで、[ウィンドウ]-> [デバイス]を開き、デバイスを選択します。

  4. ウィンドウの下部にある三角形をクリックして、デバイスログを開きます。

  5. ゴミ箱をクリックしてログを消去し、関連する可能性のある以前のログを消去します。

  6. 再生ボタンをクリックして、Xcodeでアプリを再インストールします。

  7. アプリの起動後、デバイスがファイルを正しく要求している場合、デバイスのログに「Apple-app-site-association」を検索して見つけることができるエラーが含まれているはずです。

Apple-app-site-associationファイルが適切に提供される場合(ステップ2は省略されます)、エラーは発生しません。問題がある場合は、代わりに認証エラーが表示される場合があります。

5
Sam

(ユニバーサル)リンクのオープンを簡単にテストする必要がある場合は、次のコマンドを使用して、ターミナルからシミュレータでリンクを開くこともできます。

xcrun simctl openurl booted yourapp_or_http://yourlink

例えば:

xcrun simctl openurl booted https://www.google.com

4
morksinaanab

これを理解するために1日近くかかりました。私が抱えていた問題は、XCodeで更新されたプロビジョニングプロファイルをダウンロードしていなかったことです(この後、XCodeも再起動しました)。

(設定>アカウント>詳細の表示>すべてダウンロード)

3
ken

私はそれを機能させることができましたが、かなり時間がかかり、苦労しました。 署名しない限りApple-app-site-associationファイル(署名はオプションです!)Safariでリンクをタップすると、notアプリを開きます(頭痛の種です)。

3
Attila Bardos

シミュレータでユニバーサルリンクをテストできます

App Search Programming Guide:Support Universal Links から

3
holmesal

Apple-app-site-associationFirebaseでホストしている場合は、必ず/.well-known/サブディレクトリに配置してください! Xcodeは最初にそのURLを照会し、成功した場合、ルートディレクトリのApple-app-site-associationを照会しようとしないようです。なんらかの理由で、Firebaseのエンジニアは、ホストされたWebサイトが/.well-known/Apple-app-site-associationに自動的に応答するようにしました。

2
NAlexN

私にとっての問題はApple-app-site-associationファイルであることが判明しました。 Appleのドキュメントによると、applinksパラメーターのみが必要です。 activitycontinuationパラメーターを追加し、機能しました。

{
  "activitycontinuation": {
    "apps": [
      "9JA89QQLNQ.com.Apple.wwdc"
    ]
  },
  "applinks": {
    "apps": [],
    "details": [{
        "appID": "9JA89QQLNQ.com.Apple.wwdc",
        "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
      }]
  }
}
2
Chris

Developer.Apple.comにアクセスして、配布プロファイルの1つを編集します。編集ページでアプリIDのポップアップを開くと、アプリ名のリストが表示され、アプリ名の後ろの()角かっこで表示されますすべてのrealApp ID。チームIDをプレフィックスとして持つアプリもあれば、notを持つアプリもあります。 ()内のポップアップメニューに表示されているものを正確に使用し、Apple-app-site-association詳細appIDフィールドに入力してください。アプリとそのユニバーサルリンクに関して、まさにこの問題がありました。

2
MacMark

私にとってうまくいった問題/ソリューションのコンボを実際に見たことがないので、誰かが同じ問題を抱えている場合に備えて追加することもできます!

私のアプリでは、カスタムURLスキーム(APP_TARGET > Info > URL Typesで設定)を使用し、ここからURLスキームを一致するようにFirebaseコンソールに設定しましたが、まだ機能していませんでした。

私の問題は、実際には2つの問題でした。

署名の自動管理をチェックする場合は注意してください

私のようにXcodeの「署名の自動管理」設定を確認している場合は、簡単なデモアプリを作成しようとしていたため、使用するTeamIDがFirebaseコンソールのTeamIDと一致することを確認する必要があります。最初にApple開発者アカウントにアクセスして、メンバーシップページからチームIDをコピーしましたが、後でXcodeで使用されている実際のIDが異なることがわかりました。 (これはAPP_TARGET > General > Signing > Signing Certificate.にあります。私にとっては、iPhone Developer: My Name (TEAM_ID)のように見えました)。

RLタイプのバンドルIDにTeamIDをプレフィックス

FirebaseコンソールとXcodeでこれらが一致することを確認した後、次の問題はURLスキームの識別子でした。ここではバンドル識別子を使用するのが一般的ですが、Firebaseでは実際にFirebaseコンソールで指定したチームIDをプレフィックスとして使用するため、XcodeのURLタイプセクションでも識別子にプレフィックスを付ける必要がありました。

これらの2つの修正とGoogleService-Info.plistファイルの再ダウンロードの後、ダイナミックリンクを開くのに問題はありませんでした。

2
Kyle H

この場所にApple-app-site-associationファイルを追加しました:

https://example.com/Apple-app-site-association

IOS 9では正常に動作しましたが、iOS 10では動作しませんでした。

問題は。well-knownパスにあったようです:

https://example.com/.well-known/Apple-app-site-association

https://example.com/.well-known/Apple-app-site-associationhttps://example.com にリダイレクトされるため

<Notice>: Allowing redirect 'https://example.com/.well-known/Apple-app-site-association' -> 'https://example.com/'
<Notice>: ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/Apple-app-site-association

私の意見では、.well-knownパスが何らかの形で正しく機能しない場合、ユニバーサルリンクが破損します。

2

私にとってのエラーは、サイトがwww.domain.comをdomain.comにリダイレクトしているため、www.domain.com/*がすべて失敗することです。お役に立てば幸いです。

1
wzhang84

2日間の完全な絶望の後、私は最終的にそれを修正したと思います。ここに私の解決策があります:

古いアプリは新しいアプリとは異なるアプリプレフィックスを使用しているようです。新しいアプリはこの目的のためにチームIDのみを使用します。アプリのプレフィックスとチームIDが同一でない場合は、Appleアプリサイトの関連付けファイルでアクティビティ継続フィールドを指定する必要があるようです。

{
    "activitycontinuation": {
        "apps": [
            "YOUR_APP_PREFIX.de.company.app"
        ]
   },
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "YOUR_APP_PREFIX.de.company.app",
        "paths": ["/*"]
      }
    ]
  }
} 

私が地獄に乗っている間に私が経験したもう一つのことは、アプリを削除してデバイスを再起動することが、このファイルを強制的に更新する唯一の方法のようだということです。

1
Sebastian Boldt

2日後、このようなリンク(ブランチから)

applinks:xxxx.app.link

アプリケーションをアーカイブ(アドホック)した後にのみ動作し、電話にインストールします。

1
Bence Pattogato

カレンダーアプリを使用して、iOSシミュレーターでユニバーサルリンクをテストできました。

イベントを作成し、テストするURLをイベントのURLフィールドに追加しました。次に、作成されたイベントを表示するときに、URLリンクをタップするだけで、アプリが開きます。

1
Tiago Alves

このページを見つける将来の読者のために...

同様の状況がありました。しかし、私の状況では、iOS10はAOKで動作していたので、何をしても(ビルド番号のバンプ、削除/再インストールなど)、iOS9は動作を拒否するようでした。

私はiOS10からこれに来ていましたが、iOS9をサポートする必要がありました。当時、ここのドキュメント- https://developer.Apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html -ファイルが配置される可能性があることを明確に述べていますWebサーバーのルート(/Apple-app-site-associationなど)または.well-knownフォルダー(/.well-known/Apple-app-site-associationなど)内。 Androidもサポートしているため、同様のファイルに.well-knownフォルダーも使用するため、両方を配置することにしました。

IOS10での新規インストールの場合、明らかにルートファイルを要求し、失敗し、次に.well-knownファイルを要求し、成功します。

IOS9の場合、明らかにルートファイルを要求し、失敗し、それ以外は何もしません。

解決策:iOS9をサポートしている場合、ファイルを/Apple-app-site-associationに配置します。

0
greymouser

私の場合、AASAファイルのリクエスト: https://example.com/Apple-app-site-association

リダイレクトされていました: https://www.example.com/Apple-app-site-association

キッカーは-これはiOS 11では正常に動作しますが、iOS 9.3.5では失敗します。図を移動します。

解決策:Apple-app-site-associationファイルはiOS 9の302または301リダイレクトの背後にあってはなりません(公平に言うと、これは Lトラブルシューティングページ 。)

0
Jeff Ward

これが私を理解するのに約2日かかったので、これが誰かを助けることを願っています。

www.ファイルのassociated-domains.entitlementsを追加する必要がありました。

        <string>applinks:www.yourdomain.com</string>
        <string>activitycontinuation:www.yourdomain.com</string>

yourdomain.comの代わりにwww.yourdomain.comを使用した場合、サーバーはリダイレクト-> 304を実行し、content-type: application/jsonApple-app-site-association fileを含めなかったためです。

N.B。汎用リンクはyourdomain.comおよびwww.yourdomain.comでも引き続き機能します

0
SparkyRobinson

私の場合、エラーはパスにクエリパラメータを挿入することでした。

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "/auth-ui/hub?target=confirm&*" ]
            }
        ]
    }
}

パスから「?target = confirm&*」を削除すると、機能し始めます

0
Vins

誰かがFlaskのソリューションを提供するのを見たことはありません。

これは私のために働いた。

Flaskを使用している場合は、「Apple-app-site-association」を静的フォルダーに入れてから、これをapp.pyファイルに追加します。

@application.route('/Apple-app-site-association', methods=['GET'])
def Apple_app_site_association():
    return application.send_static_file('Apple-app-site-association')
0
Josh Wolff

私にとって、上記のすべての回答を実装し、AASAファイルが実際にmpoisotの回答でダウンロードされていることをテストした後、私の問題はXcodeで関連ドメインを次のように追加したことでした。

applinks:example.com

そして、私のノートアプリで私が使用しようとしていた:

Https://example.com

aASAが署名されていないため、HTTPSを介して確実に提供したかったためです。だから私のノートアプリで私が使用しようとしたときにうまくいきました:

 example.com

Xcodeからの開発ビルドまたはTestflightからの配布ビルドのいずれかでiOS 12.1.2を使用する物理デバイス上で動作します

0
Jorge Duque

トラブルシューティングについてもメモします。

基本的に2つの部分があり、それらは一緒にリンクする必要があります:1)webサイトと2)iOSアプリ。

  1. webサイトでは、1つの問題のみがありました。Apple-app-site-associationファイルのMIMEタイプはapplication/jsonではありませんでした。

    また、 API Validation Tool は、test環境の場合、私たちを助けていませんでした

ドメイン資格を持つアプリのエラーなしディープリンクのデュアル認証を確認するために使用される資格データは、アプリの現在リリースされているバージョンのものです。このデータの更新には48時間かかる場合があります。

しかし、最終的にウェブサイトは大丈夫でした。

Webログを確認し、Apple-app-site-associationファイルへのGETリクエストを確認し、iOSアプリに切り替えることにしました。

  1. このスレッドで既に述べたように、iOSアプリのセットアップを処理するには、Consoleプロセスのみを表示するためのフィルタリングを使用して、swcdアプリを実行することをお勧めします。

私たちの場合、問題はワイルドカードURLに依存していることでした:applinks:*.prod_site_name.comの形式で、*はhttps://test_env.num4.prod_site_name.comのようなすべてのテスト環境の先頭をカバーすると考えますが、これは機能しません。コンソールに表示されていたもの:

ドメイン「* .prod_site_name.com」、URL「 https://prod_site_name.com/.well-known/Apple-app-site-association 」のリクエストを開始しました

したがって、この場合の修正は、アプリのテスト対象にテスト固有のアプリリンクを提供することでした:applinks:test_env.num4.prod_site_name.com

0
IVtrue