iOS
アプリケーションで ユニバーサルリンク をサポートし、ユニバーサルリンクをサポートするためにサーバーをセットアップするにはどうすればよいですか?
ユニバーサルリンクをサポートすると、iOS 9ユーザーはWebサイトへのリンクをタップして、Safariを経由せずにインストール済みアプリにシームレスにリダイレクトできます。アプリがインストールされていない場合、ウェブサイトへのリンクをタップすると、ウェブサイトがSafariで開きます。
ここでは、独自のサーバーをセットアップし、アプリ内の対応するリンクを処理する方法。
サーバーをオンラインで実行する必要があります。 iOSアプリをサーバーに安全に関連付けるには、AppleではApple-app-site-association
という設定ファイルを使用可能にする必要があります。これはドメインを説明するJSON
ファイルですおよびサポートされているルート。
Apple-app-site-association
ファイルには、リダイレクトなしでhttps:// {domain}/Apple-app-site-associationでHTTPS
を介してアクセスできる必要があります。
ファイルは次のようになります。
{
"applinks": {
"apps": [ ],
"details": [
{
"appID": "{app_prefix}.{app_identifier}",
"paths": [ "/path/to/content", "/path/to/other/*", "NOT /path/to/exclude" ]
},
{
"appID": "TeamID.BundleID2",
"paths": [ "*" ]
}
]
}
}
[〜#〜] note [〜#〜]-.json
にApple-app-site-association
を追加しないでくださいファイル名。
キーは次のとおりです:apps
:値として空の配列が必要であり、存在する必要があります。これは、Appleが望んでいる方法です。details
:辞書の配列で、WebサイトでサポートされているiOSアプリごとに1つです。各辞書には、アプリ、チーム、およびバンドルIDに関する情報が含まれています。
パスを定義するには3つの方法があります:Static
:特定のリンクを識別するために、サポートされているパス全体がハードコーディングされています。/static/termsWildcards
:*を使用して、動的パスを一致させることができます。/books/*は、著者のページへのパスと一致します。 ?特定のパスコンポーネント内、たとえばbooks/1? IDが1で始まる書籍と一致させるために使用できます。Exclusions
:NOTをパスの前に付けると、そのパスは一致から除外されます。
配列内でパスが言及される順序は重要です。以前のインデックスは優先度が高くなります。パスが一致すると、評価は停止し、他のパスは無視されます。各パスでは大文字と小文字が区別されます。
アプリでサポートされる各ドメインは、独自のApple-app-site-associationファイルを利用可能にする必要があります。各ドメインによって提供されるコンテンツが異なる場合、ファイルのコンテンツもそれぞれのパスをサポートするように変更されます。それ以外の場合は、同じファイルを使用できますが、サポートされているすべてのドメインでアクセスできる必要があります。
注:サーバーがHTTPS
を使用してコンテンツを提供し、アプリケーションセットアップガイドにジャンプする場合、この部分をスキップできます。
アプリがiOS 9をターゲットとしており、サーバーがHTTPS
を使用してコンテンツを提供する場合、ファイルに署名する必要はありません。そうでない場合(たとえば、iOS 8でHandoffをサポートする場合)、承認された認証局からのSSL
証明書を使用して署名する必要があります。
注:これは、AppleがApp Storeにアプリを送信するために提供する証明書です。提供する必要があります。サードパーティにより、HTTPS
サーバーに使用するものと同じ証明書を使用することをお勧めします(必須ではありません)。
ファイルに署名するには、まず単純な.txtバージョンのファイルを作成して保存します。次に、ターミナルで次のコマンドを実行します。
cat <unsigned_file>.txt | openssl smime -sign -inkey example.com.key -signer example.com.pem -certfile intermediate.pem -noattr -nodetach -outform DER > Apple-app-site-association
これにより、現在のディレクトリに署名されたファイルが出力されます。 example.com.key
、example.com.pem
、およびintermediate.pem
は、認証局によって利用可能になるファイルです。
注:ファイルが署名されていない場合、Content-Type
のapplication/json
が必要です。それ以外の場合は、application/pkcs7-mime
になります。
Appleアプリ検索検証ツールでサーバーを検証する
iOS 9 Search APIのWebページをテストします。 URLを入力すると、ApplebotはWebページをクロールし、最適な結果を得るために最適化する方法を示します https://search.developer.Apple.com/appsearch-validation-tool/
Webサイトのコードは、gh-pagesブランチ https://github.com/vineetchoudhary/iOS-Universal-Links/tree/gh-pages にあります。
アプリケーションはiOS 9を対象とし、Objective-C
でXcode 7.2を使用します。
アプリ側のセットアップには2つのことが必要です。
1。アプリの資格を構成し、ユニバーサルリンクを有効にします。
2。 AppDelegate
の着信リンクの処理。
1。アプリの資格を構成し、ユニバーサルリンクを有効にします。
アプリの資格を構成する最初のステップは、アプリIDでアプリを有効にすることです。 Apple Developer Member Center。証明書、識別子とプロファイル、識別子の順にクリックします。アプリIDを選択し(必要に応じて最初に作成)、[編集]をクリックし、関連付けられたドメインの資格を有効にします。
次に、それぞれのアプリIDをクリックして、アプリIDのプレフィックスとサフィックスを取得します。
アプリIDのプレフィックスとサフィックスは、Apple-app-site-associationファイルのプレフィックスと一致する必要があります。
[Xcode
]で、アプリのターゲットを選択し、[機能]をクリックして、[関連付けられたドメイン]を[オン]に切り替えます。アプリがサポートするドメインごとに、applinks:というプレフィックスを付けてエントリを追加します。
例:applinks:vineetchoudhary.github.io
サンプルアプリでは次のようになります。
注:メンバーセンターで登録済みのアプリIDと同じチームを選択し、同じバンドルIDを入力したことを確認してください。また、ファイルを選択し、ファイルインスペクターでエンタイトルメントファイルがXcodeに含まれていることを確認し、ターゲットがチェックされていることを確認します。
[UIApplicationDelegate application: continueUserActivity: restorationHandler:]
のAppDelegate.m
メソッドは、着信リンクを処理します。このURLを解析して、アプリで適切なアクションを決定します。
たとえば、サンプルアプリでは:
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *navigationController = (UINavigationController *)_window.rootViewController;
if ([url.pathComponents containsObject:@"home"]) {
[navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"HomeScreenId"] animated:YES];
}else if ([url.pathComponents containsObject:@"about"]){
[navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"AboutScreenId"] animated:YES];
}
}
return YES;
}
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
//handle url
}
return true
}
アプリコードは https://github.com/vineetchoudhary/iOS-Universal-Links/ のマスターブランチにあります。
Vineetの投稿をすべて完了してもまだ機能しない場合は、配布プロビジョニングプロファイルを使用してみてください。上記の投稿からすべてを行いましたが、機能させるために配布プロファイルを発行する必要がありました。
開発プロファイルを使用すると、アプリはAASAファイルを正常にダウンロードしましたが、リンクを押していたときにアプリケーションを開くことはありませんでした。
それが役に立てば幸い。
Swift 3 +、 Vineet Choudharyによる回答 に基づいて、ユニバーサルリンクを処理するためのコードを次に示します。
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL {
//handle URL
}
return true
}