だから私はチュートリアルに従いました 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
しかし、ジルチ。
誰かがこれを完成させましたか?逃したものはありますか?
いくつかの問題が考えられます。
このリンクバリデータにドメインを貼り付けて、問題がないことを確認してください。 https://limitless-sierra-4673.herokuapp.com/ (ShortStuffSushiのクレジット- repo )
資格で指定されたドメインで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 。
私の個人的なテストでは、Safariのリンクをクリック/入力しても、一度もアプリを直接開いたことはありません。他のアプリ(iMessage、Mail、Slackなど)からのクリックは機能しました。他の人は、Google検索結果のリンクをクリックすると、アプリが直接開かれたと報告しています。
ユニバーサルリンクがアプリを開くことに成功し、(アプリのナビゲーションバーの右上隅にあるサイトをタップすることで)クリックして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/*
は影響を受けず、アプリを直接開きます。
問題が何であるかを発見したら教えてください。個人的には、ユニバーサルリンクがどのように機能し、どのようなエッジケースが存在するかについて非常に興味があります。がんばろう。
これがうまくいかないことはたくさんあります。 2つのポイントが問題を引き起こしました。
Xcodeでは、Associated Domainsエンタイトルメントを追加するとき、各エントリはapplinks:
で始まり、次にドメイン名が必要です。例えば。 applinks:www.Apple.com
。
Xcodeは資格ファイルを作成しましたが、ビルドには含まれていませんでした。手動でそのボックスをクリックする必要がありました。
はい、そうすると、Apple-app-site-association
ファイルに署名する必要はありませんでした。これはプレーンテキストであり、HTTPSを介して提供される限り機能します。 (ただし、iOS 8をサポートしている場合は、引き続き署名する必要があります。)
ユニバーサルリンクの関連付けファイルの作成に関するドキュメント に間違いがあるようです。
それが言うところ:
AppIDキーの値は、アプリのチームIDとバンドルIDです
それは言うべきです
AppIDキーの値は、アプリのプレフィックスとバンドルIDです
ほとんどのアプリでは、チームIDとアプリのプレフィックスは同じように見えますが、アプリが長年ストアに存在している場合、これらの値は異なる可能性があります。
この値を見つけるには、 https://developer.Apple.com でメンバーセンターを開き、「証明書、識別子、プロファイル」を見て、表の「識別子」、「アプリID」の順にクリックします。 「識別子」の下。アプリを見つけて、プレフィックス値とバンドルIDを使用して、関連付けファイルのAppIDを作成します。
St.derrick's Answer は参考になります。
ただし、サファリではなくアプリでユニバーサルリンクを再度有効にするには、次のことを行う必要があります。
サーバー側でApple-app-site-association
を検証するには、Appleの公式バリデーターを使用できます。
https://search.developer.Apple.com/appsearch-validation-tool/
この問題のデバッグを支援するには、アプリのインストール時にデバイスのコンソール出力で「swcd」を検索して、ユニバーサルリンクの登録が機能したか失敗したかを確認します。
私にとっての問題は、ルートディレクトリa(例:http://example.com/
)へのリンクではアプリが開かないことですが、パス(例:http://example.com/mypath
)を追加しても機能することです。 "/"
をパスリストに追加すると解決しました。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.BundleIdentifier",
"paths": [ "*", "/" ]
}
]
}
}
Slutskerが this Apple Developer Forumsスレッドで回答したとおり。
ユニバーサルリンクが正しく実装されているかどうかを確認するための簡単な手順。
アプリを起動する予定のリンクを長押しします。コンテキストメニューに[[アプリ名]で開く]が表示されます。
Notesアプリを開き、アプリを開くためのリンクを入力します。完了をタップします。リンクが黄色に変わり、リンクをタップすると、Safariではなくアプリが開きます。
リンク http://yourDomain.com がアプリを起動しない場合は、 http://yourDomain.com/yourFolder/ を試してください。
Safariでは、コンテキストメニューにsafariで[[アプリ名]で開く]と表示されているが、リンクをタップするとアプリを起動する代わりにsafari自体でリンクが開く場合、
a。 「プルして更新」のように、リンクがクリックされたときに開いたサファリページをプルダウンしてみてください。アプリを開くことができるバナーが表示されます。バナーをタップしてアプリを開き、ホームボタンを押してアプリを閉じ、サファリに戻って、もう一度リンクをタップしてアプリを起動してみてください。今回は、バナーをタップすると、アプリでリンクを開くための設定が保存されているはずなので、アプリが起動します。
b。手順a。の後もアプリが起動しない場合は、Gmailなどのウェブメールへのリンクをメールで送信し、safariでウェブメールサイトを開いて、リンクをクリックしてみてください。これが機能する場合、リンクと同じドメインからアプリを起動しようとしている可能性があります。私が見たものから、同じドメインからのアプリの起動はほとんど失敗します。リンクがユーザーと同じドメインにある場合、おそらくサファリはリンク先URLがユニバーサルリンクであるかどうかをチェックしません。そのため、別のドメインからアプリを起動してみてください。
ユニバーサルリンクを統合した後、プロジェクトバージョンまたはビルド番号を増やすことも非常に重要です。削除/再インストールしても、バージョンを上げるまでiOSはリンクを取得しません。
ブラウザーのURLフィールドにリンクを貼り付けると、ユニバーサルリンクは機能しません。
ユニバーサルリンクworkユーザーが駆動する<a href="...">
要素を使用して、ドメイン間でをクリックします。例:google.comにbnc.ltを指すユニバーサルリンクがある場合、アプリを開きます。
ユニバーサルリンクは動作しません同じドメインでユーザー駆動の<a href="...">
要素をクリックします。例:google.comの別のユニバーサルリンクを指すgoogle.comのユニバーサルリンクがある場合、アプリは開きません。
ユニバーサルリンクは、ユーザーアクションの一部でない限り、Javascript(window.onload内または<a>
要素の.click()呼び出し)を介してトリガーできません。
3番目の弾丸は、理解するのに約1日かかりました。
ここの人々が他のソリューションを探している場合、多くの問題がポップアップ表示され、多くの頭痛の種を引き起こしているのを見て、Universal Linksをデバッグするための段階的な手順をまとめました。
見てみな:
ユニバーサルリンクを新しく設定するだけの場合、このガイドは非常に役立ちます。
彼らが役立つことを願っています!
もっと多くの人が将来私と同じ問題に遭遇した場合に備えて、私が発見したものをいくつか追加すると思いました。これらは主に認証エラーに関連しています。
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
ファイルを取得していることを確認する方法のステップバイステップガイドです。手順は次のように要約されます。
アプリをアンインストールします。ファイルはインストール時にダウンロードされるため、これが必要です。
サーバーがApple-app-site-association
を適切に提供しないようにします。
Xcodeで、[ウィンドウ]-> [デバイス]を開き、デバイスを選択します。
ウィンドウの下部にある三角形をクリックして、デバイスログを開きます。
ゴミ箱をクリックしてログを消去し、関連する可能性のある以前のログを消去します。
再生ボタンをクリックして、Xcodeでアプリを再インストールします。
アプリの起動後、デバイスがファイルを正しく要求している場合、デバイスのログに「Apple-app-site-association」を検索して見つけることができるエラーが含まれているはずです。
Apple-app-site-association
ファイルが適切に提供される場合(ステップ2は省略されます)、エラーは発生しません。問題がある場合は、代わりに認証エラーが表示される場合があります。
(ユニバーサル)リンクのオープンを簡単にテストする必要がある場合は、次のコマンドを使用して、ターミナルからシミュレータでリンクを開くこともできます。
xcrun simctl openurl booted yourapp_or_http://yourlink
例えば:
xcrun simctl openurl booted https://www.google.com
これを理解するために1日近くかかりました。私が抱えていた問題は、XCodeで更新されたプロビジョニングプロファイルをダウンロードしていなかったことです(この後、XCodeも再起動しました)。
(設定>アカウント>詳細の表示>すべてダウンロード)
私はそれを機能させることができましたが、かなり時間がかかり、苦労しました。 署名しない限りApple-app-site-association
ファイル(署名はオプションです!)Safariでリンクをタップすると、notアプリを開きます(頭痛の種です)。
シミュレータでユニバーサルリンクをテストできます
Apple-app-site-association
をFirebaseでホストしている場合は、必ず/.well-known/
サブディレクトリに配置してください! Xcodeは最初にそのURLを照会し、成功した場合、ルートディレクトリのApple-app-site-association
を照会しようとしないようです。なんらかの理由で、Firebaseのエンジニアは、ホストされたWebサイトが/.well-known/Apple-app-site-association
に自動的に応答するようにしました。
私にとっての問題は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/*" ]
}]
}
}
Developer.Apple.comにアクセスして、配布プロファイルの1つを編集します。編集ページでアプリIDのポップアップを開くと、アプリ名のリストが表示され、アプリ名の後ろの()角かっこで表示されますすべてのrealApp ID。チームIDをプレフィックスとして持つアプリもあれば、notを持つアプリもあります。 ()内のポップアップメニューに表示されているものを正確に使用し、Apple-app-site-association詳細appIDフィールドに入力してください。アプリとそのユニバーサルリンクに関して、まさにこの問題がありました。
私にとってうまくいった問題/ソリューションのコンボを実際に見たことがないので、誰かが同じ問題を抱えている場合に備えて追加することもできます!
私のアプリでは、カスタム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
ファイルの再ダウンロードの後、ダイナミックリンクを開くのに問題はありませんでした。
この場所に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-association が https://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パスが何らかの形で正しく機能しない場合、ユニバーサルリンクが破損します。
私にとってのエラーは、サイトがwww.domain.comをdomain.comにリダイレクトしているため、www.domain.com/*がすべて失敗することです。お役に立てば幸いです。
2日間の完全な絶望の後、私は最終的にそれを修正したと思います。ここに私の解決策があります:
古いアプリは新しいアプリとは異なるアプリプレフィックスを使用しているようです。新しいアプリはこの目的のためにチームIDのみを使用します。アプリのプレフィックスとチームIDが同一でない場合は、Appleアプリサイトの関連付けファイルでアクティビティ継続フィールドを指定する必要があるようです。
{
"activitycontinuation": {
"apps": [
"YOUR_APP_PREFIX.de.company.app"
]
},
"applinks": {
"apps": [],
"details": [
{
"appID": "YOUR_APP_PREFIX.de.company.app",
"paths": ["/*"]
}
]
}
}
私が地獄に乗っている間に私が経験したもう一つのことは、アプリを削除してデバイスを再起動することが、このファイルを強制的に更新する唯一の方法のようだということです。
2日後、このようなリンク(ブランチから)
applinks:xxxx.app.link
アプリケーションをアーカイブ(アドホック)した後にのみ動作し、電話にインストールします。
カレンダーアプリを使用して、iOSシミュレーターでユニバーサルリンクをテストできました。
イベントを作成し、テストするURLをイベントのURL
フィールドに追加しました。次に、作成されたイベントを表示するときに、URLリンクをタップするだけで、アプリが開きます。
このページを見つける将来の読者のために...
同様の状況がありました。しかし、私の状況では、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
に配置します。
私の場合、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トラブルシューティングページ 。)
これが私を理解するのに約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/json
にApple-app-site-association file
を含めなかったためです。
N.B。汎用リンクはyourdomain.com
およびwww.yourdomain.com
でも引き続き機能します
私の場合、エラーはパスにクエリパラメータを挿入することでした。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.BundleIdentifier",
"paths": [ "/auth-ui/hub?target=confirm&*" ]
}
]
}
}
パスから「?target = confirm&*」を削除すると、機能し始めます
誰かが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')
私にとって、上記のすべての回答を実装し、AASAファイルが実際にmpoisotの回答でダウンロードされていることをテストした後、私の問題はXcodeで関連ドメインを次のように追加したことでした。
applinks:example.com
そして、私のノートアプリで私が使用しようとしていた:
Https://example.com
aASAが署名されていないため、HTTPSを介して確実に提供したかったためです。だから私のノートアプリで私が使用しようとしたときにうまくいきました:
example.com
Xcodeからの開発ビルドまたはTestflightからの配布ビルドのいずれかでiOS 12.1.2を使用する物理デバイス上で動作します
トラブルシューティングについてもメモします。
基本的に2つの部分があり、それらは一緒にリンクする必要があります:1)webサイトと2)iOSアプリ。
webサイトでは、1つの問題のみがありました。Apple-app-site-association
ファイルのMIMEタイプはapplication/json
ではありませんでした。
また、 API Validation Tool は、test
環境の場合、私たちを助けていませんでした
ドメイン資格を持つアプリのエラーなしディープリンクのデュアル認証を確認するために使用される資格データは、アプリの現在リリースされているバージョンのものです。このデータの更新には48時間かかる場合があります。
しかし、最終的にウェブサイトは大丈夫でした。
Webログを確認し、Apple-app-site-association
ファイルへのGETリクエストを確認し、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