ディープリンクは、Web 上の特定のコンテンツ (ストア製品など) にリンクする、ドメイン下の URI です。ディープリンクに対応したネイティブ モバイル アプリケーションでは情報を直接処理することができます。つまり、エンドユーザーは、ブラウザーで Web クライアントアプリケーションを使用しなくても、モバイルアプリケーションから Web リンクを開くことができます。
この記事では、モバイルアプリケーションにディープリンクを追加するメカニズムについて説明します。
予備設定
ネイティブモバイルのメインオブジェクトで、デバイスのトリガーに応じてアプリケーションでどのベース URL を処理するかを指定するために、
[ Deep Link Base URL ] プロパティを設定する必要があります。
Android アプリケーションのサーバー側の設定はオプションです。サーバー側で設定されていない場合、Android OS は、リクエストされた URI を開くことをエンドユーザーに許可するオプションを表示します (複数のオプションがある場合)。次の場所に生成された JSON ファイルをサーバールートにコピーすることによって、開発者がサーバー側のオプションを設定した場合は (アクセス許可の確認には
ステートメントテストが有用)、処理できるすべての URI がアプリケーションによって即座に開かれます。
<モデル>/<環境>/mobile/Android/<メインオブジェクト名>/assetlinks.json
Apple アプリケーションのサーバー側の設定は必須です。Apple デバイスでディープリンクを管理するには、ドメインの権限を確保するために、特別なファイルを
サーバールートに格納する必要があります (サーバー設定のテストには
brench aasa-validator が役立ちます)。このファイルは、GeneXus によって次のディレクトリーに自動的に生成されます:
<モデル>/<環境>/mobile/iOS/<メインオブジェクト名>/apple-app-site-association/<ドメイン>
<ドメイン> は、 [ Deep Link Base URL ] プロパティの値によって異なります。
このファイルをサーバールートに手動でコピーし、サーバーが空のファイル拡張子リクエストを JSON として受け入れるようにする必要があります (次の表を参照)。サーバーのリセット後にファイルにアクセスするには、
https://developer.apple.com/documentation/Xcode/supporting-associated-domains で説明されているように、
https://<完全修飾ドメイン>/.well-known/apple-app-site-association でリダイレクトを使用せずに、
HTTPS 経由でアクセスする必要があります。
それが
HTTPS サイトであり、ドメインの完全修飾名を使用し、".well-known" というサブフォルダにある必要があることに注意してください。
.NET 環境 (<webapp>/web.config) |
Java 環境 (<tomcat_dir>/conf/web.xml) |
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="application/json" />
</staticContent>
</system.webServer>
</configuration>
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1>
<mime-mapping>
<extension>.</extension>
<mime-type>application/json</mime-type>
</mime-mapping>
</webapp>
|
あるいは、.json 拡張子を apple-app-site-association ファイルに追加した場合は、代わりに次のようにします:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="apple_json_file">
<match url="^apple-app-site-association" />
<action type="Rewrite" url="apple-app-site-association.json" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
|
次のようにしてプロセスを簡素化することもできます (GeneXus 15 Upgrade 10 以降で利用可能):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1>
<filter>
<filter-name>CustomFilter</filter-name>
<filter-class>
com.genexus.filters.CustomFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>CustomFilter</filter-name>
<url-pattern>
/apple-app-site-association
</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</webapp>
|
ヒント: ナレッジベース内の web.config File オブジェクトをこのコンテンツに添付し、それを /web ディレクトリーにコピーできます (アクションがトリガーされるのはそのデプロイ前)。このアクションにより、生成された web.config ファイルがカスタムのファイルとマージされるため、ディープリンクの関連付けプロセスが簡素化されます。
それを必要に応じて iOS で行う 1 つの方法は、<ドライブ>:\inetpub\.well-known というフォルダを作成し、apple-app-site-association をそこにコピーすることです。次に、前述の web.config を <ドライブ>:\inetpub にコピーし、https://<完全修飾ドメイン>/.well-known/apple-app-site-association にアクセスして、正常に機能しコンテンツが表示されることを確認します。
|
|
ファイルを生成するには、
[ Development Team ID ] プロパティを設定する必要があります。設定していない場合、ビルド中に次の警告が表示されます:
警告: The property Development Team ID of <main_app_name> is required for apple-app-site-association generation.
アプリケーションでディープリンクを処理するメカニズムは 2 つあります。このどちらでも URI リクエストを処理できない場合、エンドユーザーは Web ブラウザーでコンテンツを見ることができます。
1.自動
ナレッジベースには、URI でリクエストされたリソースのコンテンツを表示するための一連の対話型オブジェクトがあります。たとえば、Products トランザクションに WorkWithDevices オブジェクトを適用するものとします。このオブジェクトの Detail ノードは URI
http://www.mystore.com/viewproduct.aspx?1 に関連付けます。そのためには、Detail ノードの
[ Deep Link Name ] プロパティの値を viewproduct.aspx (リクエストされたリソースの名前) に設定する必要があります。Detail ノードには、表示される ProductId を示すための Parm ルールがあります。この Parm は、URI のクエリから自動的に取得されます (この例では、ProductId は 1 になります)。
DeepLink 外部オブジェクトを使用すると、取得した URI を処理および解析し、それぞれ対応する対話型オブジェクトにリダイレクトするためのイベントを定義できます。イベントコードとその動作の責任は開発者にあります。
ディープ リンク パラメーター (ハンドラーパネルの入力パラメーター) は、2 つの方法で管理できます:
パラメーター値は、Parm ルールに表示される順序と同じ順序で並べ替えられます。区切り文字はコンマ (",") です。
例:
http://www.mystore.com/categorysearch.aspx?17,grey+beanie
パラメーターは、URI で並べ替えなしで表示できますが、「キー = 値」のペア (
キーはパラメーター名) として指定する必要があります。区切り文字はアンパサンド (&) です。
例:
http://www.mystore.com/categorysearch.aspx?SearchedText=grey+beanie,CateogyId=17
設計済みの単純な E コマース Web サイトのモバイルアプリケーションを開発するとします。まず、次のように Web 用のオブジェクトからスマートデバイス用の兄弟オブジェクトを作成します:
この場合、Web およびモバイル用に次の 3 つのデータビューがあります:
- MyStore オブジェクト (メインパネル)
- CategorySearch オブジェクト (カスタム検索エンジン用)
- WorkWith オブジェクト (製品のリストおよび詳細表示用)
これで (メール、メッセージングシステム、ソーシャルネットワークなどを経由して)、URL を通じて Web 上でコンテンツを共有できるようになります。モバイルアプリケーションがエンドユーザーのデバイスにインストールされている場合、このコンテンツをブラウザー経由ではなくネイティブアプリケーションから直接表示できるようにします。そのためには、Web 用の各対話型オブジェクトに表示されるコンテンツとスマートデバイス用の対話型オブジェクトに表示するコンテンツをマッピングする必要があります。現在の設計では、これらのオブジェクトの名前は異なるパッケージ間で同じになっています。
最初の手順は、モバイルの MyStore オブジェクトで、ディープリンクを処理するための以下のプロパティを設定することです:
次に、各リソースを扱うパネルを設定します:
前述のとおり、ディープリンクはこれらの設定で自動的に管理されます。何らかの理由で手動で管理する必要がある場合は、
DeepLin.Handle イベントの例を参照してください。
最終的に実現する動作は次のとおりです:
注:
- 特殊な URI パラメーターは、次のようにエンコードする必要があります:
- 文字列にはパーセントエンコードを使用します (たとえば、空白の場合は「%20」または「+」)。この記事が有用です: W3C - ASCII Encoding Reference
- 日付、時刻、および日時には ISO-8601 を使用します (たとえば、08-21-2017 の場合は「20170821」)。GeneXus からこの定数を生成する方法については、「日付定数」を参考にしてください。
- Android では、サーバー側のオプションが設定されていない場合、エンドユーザーがブラウザーにコンテンツを表示できます。それ以外の場合は、常にアプリケーションに表示されます。
- iOS では、サーバー側の設定が必須であるため、エンドユーザーはアプリケーションにのみコンテンツを表示できます。ただし、アプリケーションを開いたときに、ブラウザーにリダイレクトするためのオプションが右上に表示されます。
1.手動と自動の両方の選択肢を使うことはできますか?
はい。まず、アプリケーションは
Handle イベントを呼び出します。このアクションがリクエストを満たすことができない場合 (
&IsHandled が False のまま)、自動的に解決しようとします。この方法でもリクエストを解決できない場合、コンテンツはデバイスの既定のブラウザーに表示されます。
2.HTTP 以外の URI スキームを使用できますか。
はい。手動オプションを使用して URI を適切に解析してください。
3.モバイルアプリケーションを開発して既存の Web アプリケーションと統合することはできますか。
はい。 [ Deep Link Base URL ] プロパティを適切に設定してください。
ジェネレーター:
Apple、
Android
この機能は
GeneXus 15 Upgrade 6 以降で利用できます。
Apple - Support Universal Links
Android - Android アプリリンクの処理
ブログ記事: 'Quiero abrir los links con aplicaciones' (スペイン語)