Apple Universal Links(私が見ている https://developer.Apple.com/library/ios/documentation/)を使用してiOSにアプリのインデックスを実装しようとしていますGeneral/Conceptual/AppSearch/UniversalLinks.html#// Apple_ref/doc/uid/TP40016308-CH12-SW2 )。
「アソシエーションファイルの作成とアップロード」セクションで、インデックスを特定のページに制限できることがわかりました。これは良いことです。
インデックス作成を https://www.mywebsite.com?parameter=something に制限したいのですが、どうすればよいですか?
私はそのようなことを考えていました:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "MYID",
"paths":[ "*?parameter=*" ]
}
]
}
}
あなたはそれがうまくいくと思いますか?ウェブサイトのルートディレクトリにファイルをアップロードするための認証を取得するのに時間がかかるため、まだテストできません。そのため、機能するかどうかを尋ねています。ファイルを1回だけアップロードしたいのですが、できる。
ありがとうございました
[〜#〜] no [〜#〜]、現在#(inline-links)と?(query-parmeter)はUniversal Links
でサポートされていません。 Apple Inline-Links
ファイルのQuery-Parmeter
とApple-app-site-association
をサポートする形式は提供されていません。
https://www.mywebsite.com?parameter=something へのインデックス作成を行うために、次のJSONファイルを使用しています。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.BUNDLEID",
"paths":[ "*" ]
}
]
}
}
インデックス作成をquery_parmeter1
やquery_parmeter2
などの一部のパラメーターのみに制限する場合は、UIApplicationDelegateメソッド[UIApplicationDelegate application: continueUserActivity: restorationHandler:]
で次のように処理する必要があります。
Objective-C:
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
if ([url.query containsString:@"query_parmeter1"]) {
//handle code for query_parmeter1
}else if ([url.query containsString:@"query_parmeter2"]){
//handle code for query_parmeter2
}
return YES;
}
return NO;
}
スイフト:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
let query = url.query ?? ""
if query.contains("query_parmeter1") {
// handle code for query_parmeter1
} else if query.contains("query_parmeter2") {
// handle code for query_parmeter2
}
return true
}
return false
}
注:このトリックは、Webサイトへのリンクがクリックされたときにアプリが開くのを妨げることはありません。ただし、URLが要件を満たしているかどうかを確認できます。満たされていない場合は、WebブラウザでURLを再度開くことができます。 Amazonアプリに似ています-
ベースドメインのパスoffに追加されたクエリパラメータの場合(つまり https://www.mywebsite.com/pathOffOfTheBaseDomain ?parameter = something )use:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAMID.BUNDLEID",
"paths":[ "/pathOffOfTheBaseDomain" ]
}
]
}
}
Apple Universal Linkのドキュメント によると:
Note that only the path component of the URL is used for comparison. Other components, such as the query string or fragment identifier, are ignored.
完全なURLは熟しており、AppDelegateのcontinueUserActivity
メソッドで解析できるようになります。
IOS 13では、ユニバーサルリンクURLを定義するときにクエリ値とフラグメント値を指定できるようになりました。残念ながら、これはAppleによって十分に文書化されていませんが、WWDC 2019で言及されています: https://developer.Apple.com/videos/play/wwdc2019/717/ 。
https://www.mywebsite.com?parameter=something
と一致させたい元の例では、Apple-app-site-association
ファイルは次のようになります。
{
"applinks": {
"apps": [],
"details": [
{
"appID": "MYID",
"components": [
{
"/" : "",
"?": { "parameter": "something" }
}
]
}
]
}
}
IOS 12でユニバーサルリンクのサポートを継続する場合は、引き続きpaths
配列を指定する必要があり、paths
配列を指定すると、iOS13デバイスはcomponents
配列を無視することに注意してください。