COVID19Radarのソースを追ってみる-2日目
COVID19Radarのソースを追ってみる-2日目
1日目はこちら
引き続きCOCOA(接触確認アプリ)のベースとして使用されているOSS(オープンソースソフトウェア)である、COVID19Radarについて、処理を追ってみた。
ただ、C#の経験もFultter以外のAndroid開発の経験もなく、苦戦した挙句ざっくり理解で止めた1ので、参考程度で。
なので、同じようなことしている人がいれば即やめ。
ソースべた貼りには少し抵抗があるので、コメント付近だけ抜粋。
はじめに
COVID19Radarのライセンスの話。
私もよくわかっていないですが、COVID19RadarはMPL2.0というライセンスを適用しており、
ざっくり、OSSの使用,改変自由。ただ使用,改変したところはOSS化(ソース公開)必須。この制約はファイル単位で適用。
って感じのライセンスみたいです。
いまのCOCOAでは私が知っている範囲では、COVID19Radarへのリンクのみで、独自のソース公開は行っていないように見えるので、このライセンスに従うと↓になるはず2なんですが、実際のところはどうなんでしょうね。
- 挙動差がない箇所を含むファイル:OSSそのままの実装(ただしVerの記載が見つからないのでいつ時点のソースか?は不明)
- 挙動差がある箇所を含むファイル:完全独自の実装
調査対象
- ソース(GitHub):https://github.com/Covid-19Radar/Covid19Radar
- リビジョン:
795be4a5892d9cd914fdf3113bf8ca21fa7596695a54949ddf51dbf0db58c09d4142a31c7d663076
※見てるソースが新しすぎることに気づいたので一旦リリース日の6/16のソースまで戻しました。
TutorialPage1
[このアプリでできること]画面を表示。 [次へ]ボタンを押すとTutorialPage2(プライバシーについて)画面へ移動
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\Tutorial\TutorialPage1.xaml
- 遷移先:TutorialPage2
- COCOAとの挙動差:なさそう
- 詳細:
// Button=ボタン <Button // [次へ]ボタン AutomationId="NextButton" // ボタンが押されたら、TutorialPage2(プライバシーについて)画面へ移動 // 次はTutorialPage2の方に移動。xmlに集約されてたからxmlへ(Covid19Radar\Covid19Radar\Covid19Radar\Views\Tutorial\TutorialPage2.xaml) // Commad=操作された時のアクションで、↓はTutorialPage2へ遷移(移動)って意味らしい Command="{prism:NavigateTo 'TutorialPage2'}" Style="{StaticResource DefaultButton}" // Text=表示されているテキスト。TutorialPage1Buttonで検索するとAppResources.ja.resxがHitするので、そこに表示される内容が定義されている。 Text="{x:Static resources:AppResources.TutorialPage1Button}" />
TutorialPage2
[プライバシーについて]画面を表示。 [利用規約へ]ボタンを押すとTutorialPage3(利用規約)画面へ移動
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\Tutorial\TutorialPage2.xaml
- 遷移先:TutorialPage3
- COCOAとの挙動差:なさそう
- 詳細: TutorialPage1と同じ読み方なので、割愛
TutorialPage3
[利用規約]画面を表示。 [規約に同意して次へ]ボタンを押すとOnClickAgree()って処理を実行 OnClickAgree()の処理内容については後述
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Views\Tutorial\TutorialPage3.xaml
- 遷移先:OnClickAgree()
- COCOAとの挙動差:なさそう
- 詳細:
// ボタンが押されたら、OnClickAgree()を実行 // 次はOnClickAgree()の方に移動。(Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\Tutorial\TutorialPage3ViewModel.cs) // Binding Pathの場合は、OnClickAgree()って処理を実行するって意味っぽい Command="{Binding Path=OnClickAgree}"
OnClickAgree
ユーザデータを生成/登録して、PrivacyPolicyPage(プライバシーポリシー))画面へ移動
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\ViewModels\Tutorial\TutorialPage3ViewModel.cs
- 遷移先:RegisterUserAsync,PrivacyPolicyPage
- COCOAとの挙動差:なさそう
詳細:
- UserDialogs.Instance.ShowLoading()=ロードダイアグ(くるくる回るやつ)を表示。
- 分岐系は以下
- userDataService.RegisterUserAsync()=ユーザデータの作成。詳細は後述
- UserDialogs.Instance.HideLoading()=ロードダイアグを消去
userData.IsOptined = true;
= ユーザデータの登録状態をONawait userDataService.SetAsync(userData);
= ユーザデータをアプリに保存- NavigationService.NavigateAsync()=画面遷移っぽい。PrivacyPolicyPageが指定されているので、次はPrivacyPolicyPageへ移動
// ユーザデータが登録されているか? if (!userDataService.IsExistUserData){ // ユーザデータが登録されていない場合 }
// ユーザデータの構築に成功したか? if (userData == null){ // 構築に失敗した場合 ~~~省略~~~ // return=処理の終わり。なのでこれより↓に書いてる処理は実行しない。つまりは画面遷移もしない。 return; }
RegisterUserAsync
PostRegisterUserAsync()を呼び出してユーザデータを作成。
作成に成功したら、ユーザーデータをアプリに保存。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Services\HttpDataService.cs
- 遷移先:PostRegisterUserAsync
- COCOAとの挙動差:なさそう
- 詳細: 単純だったので割愛
PostRegisterUserAsync
RegisterAPIの結果をユーザデータとして保持。
その際に作られた証明書的なやつをアプリに保存。
- ファイルパス:Covid19Radar\Covid19Radar\Covid19Radar\Services\UserDataService.cs
- 遷移先:なし(遷移元に戻る)
- COCOAとの挙動差:なさそう
- 詳細:
- PostAsync()=APIを使う命令っぽい。この前に実施している処理でAPIの種類とサーバーを指定してる
- DeserializeFromJson()=ここの処理でAPIの結果(メモリの羅列)をプログラムで扱える形に加工している
UserDataModel userData = new UserDataModel();
= ユーザデータ用の入れ物を用意- たぶん各メンバはそれぞれ以下
- Secret = 鍵の証明書的なやつ?
- UserUuid = 鍵的なやつ。ここで発行されている鍵はgoogleAPIが発行する鍵とは別もので、端末に割り当てられる鍵っぽい。
googleAPIのとは違って1回限りの発行なので、やろうと思えば端末を追えちゃう。。
Issues(問題提起)にも話題が上がってるので廃止されるかも。
ただ、目的としてはサーバー上の情報に対して削除なり、陽性登録なりの要求を出す際のなりすまし防止っぽいので、本当に廃止できるかは微妙3。 - JumpConsistentSeed = 通し番号?なぞ。使用してるところが見つからない。
- IsOptined = ユーザデータの登録状態。true=ON。false=OFF。
- Application.Current.Properties=この後に実行している
SavePropertiesAsync()
とセットで、アプリへのデータ保存。ここでは[Secret]を保存している。
今日のまとめ
まぁ考えてみたら当然の話なんだけど、そりゃリリース6/16なんだから今のソース持ってきたらダメですよね。。
当初コンセプトをどれだけ満たせてるは分からないけど、引き続き継続。
続きはこちら