Help us understand the problem. What is going on with this article?

XamarinでApp Links for Android

More than 1 year has passed since last update.

はじめに

今、いただいているお仕事で初めて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ファイルの配置
  • 動作確認

参考にしたサイト

実装

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ファイルが適切にフォーマットされてホストされていることを確認することもできます。

スクリーンショット 2018-02-13 0.19.45.png

Google Digital Asset Links

出来上がったのがこちら

[{
  "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と言うディレクトリを作成し、アップロードします。

スクリーンショット 2018-02-13 0.24.54.png

アップロードできているかURLを叩いて確認。
https://exsample/.well-known/assetlinks.json

動作確認

外部アプリから http://exsample.jp/myApp/を叩いて, ちゃんと 自アプリが起動するか試める。自アプリが起動すれば成功です!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした