はじめに
今、いただいているお仕事で初めてXamarin触っているので忘れないようにメモ!
簡単な内容かもしれないけど、XamarinでApp Linksの実装の公式ドキュメントが英語だったのと、実際のディレクトリなどが違ったりしました。
やりたい事
- SMSに表示されているhttps://から始まるリンクを叩くと自アプリ起動
- リンクにパラメーターをつけて自アプリに渡す(渡した後の処理はまた別で作る)
環境
- MacBookPro late2016
- MacOS Hight Sierra var10.13.3
- Nexsus5 Android ver6.0.1
- Visual Studio for Mac Community ver7.3.3
手順
- intent filtersを追加
- 受信したインテントからデータを読み込む
- Digital Asset Links JSONファイル作成
- JSONファイルの配置
- 動作確認
参考にしたサイト
- Xamarin公式サイト App-Linking in Android 6.0
- Xamarin公式サイト キーストアの MD5 または SHA1 署名の検索
- 【Xamain .Android】 【C#】 外部アプリから, 自アプリの カスタムURL Scheme で起動させて引数を受け取る
実装
intent filtersを追加
Android公式サイトではAndroidManifest.xmlに記述と書いてあるのですが、XamarinではMainActivity.csへ記述する。
[Activity (
//省略
)]
//インテントフィルター追加
[IntentFilter(new[] { Android.Content.Intent.ActionView },
AutoVerify = true,
Categories = new[]
{
Android.Content.Intent.CategoryDefault,
Android.Content.Intent.CategoryBrowsable
},
DataScheme = "http",
DataHost = "exsample.jp",
DataPathPrefix = "/myApp/")]
自動認証を行う場合は、インテントフィルターにautoVerify=”true”
設定を行います。
受信したインテントからデータを読み込む
MainActivityクラスに受信したデータを読み込む記述を追加する。
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{ //省略
//URI情報を取得
var action = Intent?.Action;
var data = Intent?.Data;
//省略
}
Digital Asset Links JSONファイル作成
アプリがインテントフィルタで使用されているURLドメインに属していることを確認する必要があり、そのためにSHA256のフィンガープリントが必要となります。
今回はデバッグ用のキーストアーのフィンガープリントを使用します。
公式サイトのキーストアの MD5 または SHA1 署名の検索のページには
~/.local/share/Xamarin/Mono for Android/debug.keystore
ここにあると書いてますが私の環境にはXamarin
のディレクトリ内にMono for Android
のディレクトリが見当たりませんでした。
しばらく探しましたが、諦めて、ターミナルでfindすると速攻発見!(私の1時間を返して...)
$ find ./ -name debug.keystore
以下の3件の結果から該当するキーストアの場所がわかりました。
.//project/Droid/debug.keystore
.//android_project/project/debug.keystore
.//.android/debug.keystore
そして、公式サイトに載っている以下のコマンドを使ってフィンガープリントを確認
keytool -list -v -keystore "キーストアーの場所"/debug.keystore -alias androiddebugkey -storepass android -keypass android
実行すると下記の様に確認ができます。
別名: androiddebugkey
作成日: 2016/10/01
エントリ・タイプ: PrivateKeyEntry
証明書チェーンの長さ: 1
証明書[1]:
所有者: CN=Android Debug, O=Android, C=US
発行者: CN=Android Debug, O=Android, C=US
シリアル番号: 56d27636
有効期間の開始日: Mon Oct 1 10:00:00 JST 2016終了日: Fri Mar 1 10:00:00 JST 2044
証明書のフィンガプリント:
MD5: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
SHA1: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
SHA256: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
署名アルゴリズム名: SHA256withRSA
バージョン: 3
拡張:
# 1: ObjectId: 2.5.29.14 Criticality=false
確認できたら、 SHA256
の署名を使ってDigital Asset Links JSONファイルを作成します。
Digital Asset Links JSONファイルを作成するには下記のページで作成可能です。
ちなみに、以下のページでは、Digital Assetsファイルが適切にフォーマットされてホストされていることを確認することもできます。

出来上がったのがこちら
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target" : { "namespace": "android_app", "package_name": "jp.co.exsample.myapp",
"sha256_cert_fingerprints": ["XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX"] }
}]
JSONファイルの配置
作成したJSONファイルをassetlinks.json
と言う名前で保存し、Webサイトに.well-known
と言うディレクトリを作成し、アップロードします。

アップロードできているかURLを叩いて確認。
https://exsample/.well-known/assetlinks.json
動作確認
外部アプリから http://exsample.jp/myApp/
を叩いて, ちゃんと 自アプリが起動するか試める。自アプリが起動すれば成功です!