Skip to content
This repository has been archived by the owner on Apr 12, 2023. It is now read-only.

[Android] 端末の言語を変更後「プライバシーポリシーの改定」が再表示される #49

Closed
pinterior opened this issue Mar 8, 2021 · 19 comments

Comments

@pinterior
Copy link

Describe the bug

Android端末の言語設定が英語の場合、COCOA起動時に「プライバシーポリシーの改定」画面を経由しない

To Reproduce

  • プライバシーポリシー改定以前から使用し、改定の確認を行っていない環境を用意する
  • 端末の言語設定を「日本語 (日本)」に変更する
  • COCOAを起動する
  • 「プライバシーポリシーの改定」画面が表示される
  • 「確認しました」をタップせずにCOCOAを強制終了する
  • 端末の言語設定を「English (United Kingdom)」に変更する
  • COCOAを起動する
  • 「プライバシーポリシーの改定」画面が表示されずにCOCOAのホーム画面に遷移する

Expected behavior

端末の言語設定にかかわらず「プライバシーポリシーの改定」に相当する画面による確認を経てからCOCOAが動作する

Smartphone (please complete the following information):

  • Device: SH-M08
  • OS: Android 10
  • COCOA Version: 1.2.2

Additional context

「プライバシーポリシーの改定」画面を表示しない場合に旧プライバシーポリシーに沿った動作をしているのであれば、問題ありません。

@Meiryo7743
Copy link
Contributor

Android 8.0.0 が搭載された ZenFone Live L1(ZA550KL)で「端末の表示言語」を,

  1. English (United States)
  2. 日本語

……という順番で設定していますが,COCOA v1.2.1 ではプライバシーポリシー改定画面が表示されていたことを確かに記憶しています。内容は英語で書かれていました。

「端末の言語」において「日本語」が(順序関係なしに)指定されているかどうかで改定画面を表示する可能性が変わるのか,もしくは v1.2.2 から現れ始めた症状なのか……どうなんでしょうかね。

@pinterior
Copy link
Author

ログを確認してみました。
ログから察すると改定を確認したことがあったようですが、それを失念していたようです。

日本語設定でエラーが発生しているのは、日時の文字列での保存・解釈がロケール依存になっているせいでしょうか。
他にDateTime型を使っている設定項目にはStartDateTime(使用開始日時)があり、ちょっと心配になります。

var lastUpdateDate = new DateTime();
if (preferencesService.ContainsKey(key))
{
lastUpdateDate = preferencesService.GetValue(key, lastUpdateDate);
}

case DateTime d:
var valueString = preference.GetString(key, d.ToString());
value = DateTime.Parse(valueString);
break;

case DateTime d:
var valueString = d.ToString();
editor.PutString(key, valueString);
break;

  • 英語でプライバシーポリシー改定画面が表示されない時
"2021/03/08 22:38:13","Info","Start","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","104","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","Start","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","27","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","key=PrivacyPolicyLastUpdateDateTime, type=System.DateTime","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","28","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","End","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","71","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","termsType: PrivacyPolicy, lastUpdateDate: 15/12/2020 13:00:00, info.UpdateDateTime: 15/12/2020 13:00:00","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","133","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","End","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","134","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:38:13","Info","Transition to HomePage","OnNavigatedTo","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs","56","Android","10","SH-M08","Physical","1.2.2","1612855445"
  • 日本語設定でプライバシーポリシーの改定画面が表示されるとき
"2021/03/08 22:37:05","Info","Start","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","104","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","Start","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","27","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","key=PrivacyPolicyLastUpdateDateTime, type=System.DateTime","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","28","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Error","Failed to get value of PrivacyPolicyLastUpdateDateTime","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","76","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","End","GetValue","/Users/runner/work/1/s/Covid19Radar/Covid19Radar.Android/Services/PreferencesService.cs","77","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","termsType: PrivacyPolicy, lastUpdateDate: 0001/01/01 0:00:00, info.UpdateDateTime: 2020/12/15 13:00:00","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","133","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","End","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services/TermsUpdateService.cs","134","Android","10","SH-M08","Physical","1.2.2","1612855445"
"2021/03/08 22:37:05","Info","Transition to ReAgreePrivacyPolicyPage","OnNavigatedTo","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/ViewModels/HomePage/SplashPageViewModel.cs","51","Android","10","SH-M08","Physical","1.2.2","1612855445"

@pinterior pinterior changed the title [Android] 端末の言語によっては「プライバシーポリシーの改定」画面が表示されない [Android] 端末の言語を変更後「プライバシーポリシーの改定」が再表示される Mar 8, 2021
@keiji
Copy link
Collaborator

keiji commented Mar 8, 2021

Android端末(Google Pixel 3 / API Level 30)の言語設定「日本語(日本)」と「English (United Kingdom)」それぞれでnew DateTime().ToString()の結果を見てみました。
結果は、どちらの場合も0001/01/01 0:00:00で、DateTime.Parseも問題なく行われていますね 🤔

ログの出ているところは例外をcatchしている箇所なので、例外の具体的な種類を知れば、もう少し調査が進みそうです。

プライバシーポリシー改定以前から使用し、改定の確認を行っていない環境を用意する

これけっこう難しそうなんですが、どんな風に用意するといいでしょうか(直接Preferenceに書き込んだり?)。

@b-wind
Copy link

b-wind commented Mar 8, 2021

本日時点でののプライバシーポリシー確認用URLです。

https://covid19radarjpnprod.z11.web.core.windows.net/ja/terms_update.json

{
    "privacy_policy" : {
        "text" : "感染可能期間に陽性者と接触した可能性のある方にのみ通知するよう、アップデートしました。\n ・陽性者が発症日又は検査日を入力\n ・その約2日前以降に接触の可能性のある利用者に通知\n\nこれにともない、プライバシーポリシーを改定しています。\n改定内容を下記リンクからご確認ください。",
        "update_date" : "2020/12/15 13:00:00"
    }
}

@b-wind
Copy link

b-wind commented Mar 8, 2021

これけっこう難しそうなんですが、どんな風に用意するといいでしょうか(直接Preferenceに書き込んだり?)。

@keiji 開発マシンのhosts弄ってlocalhost見に行かせたり、デバッグ用Proxyとか用意すると楽かもです。

@b-wind
Copy link

b-wind commented Mar 8, 2021

例外を拾ってるのはこのあたりのようですが、種類はログには出してないですね。

case DateTime d:
var valueString = preference.GetString(key, d.ToString());
value = DateTime.Parse(valueString);
break;
default:
loggerService.Info("Type is not supported.");
value = defaultValue;
break;
}
loggerService.EndMethod();
return (T)value;
}
catch (Exception)
{
loggerService.Error($"Failed to get value of {key}");
loggerService.EndMethod();
return defaultValue;
}

@pinterior
Copy link
Author

Android端末(Google Pixel 3 / API Level 30)の言語設定「日本語(日本)」と「English (United Kingdom)」それぞれでnew DateTime().ToString()の結果を見てみました。
結果は、どちらの場合も0001/01/01 0:00:00で、DateTime.Parseも問題なく行われていますね 🤔

adb backup が効いたので確認してみると、apps/jp.go.mhlw.covid19radar/sp/jp.go.mhlw.covid19radar.xml に保存されていた内容は以下の通りでした。dd/mm/yyyyフォーマットになっています。

    <string name="PrivacyPolicyLastUpdateDateTime">15/12/2020 13:00:00</string>

また、手元の端末(SH-M08)ではログの一部にも出力されている通り、English (United Kingdom)環境のDateTime#ToString()はdd/mm/yyyyであるようです。一旦COCOAアプリのデータを削除し、再度利用開始操作を行ったときも、やはり以下のように dd/mm/yyyy フォーマットで記録されていました。(現在日時が保存されていることにはやや疑問がありますが)

    <string name="PrivacyPolicyLastUpdateDateTime">09/03/2021 03:12:00</string>

この状態から日本語設定に切り替えて起動すれば「プライバシーポリシーの改定」画面が再度表示されると思ったのですが、
"09/03/2021"は日本語環境では今年の9月3日にパースされる(?)ようで、うまく再現はしません。

もともとの現象とは真逆の問題(確認画面が出ないことが問題なのではなく、再度出ることが問題)であるなど
こちらで継続するのは不適切かとも思うので、このIssueは一旦クローズしたいと思います。
問題の整理と容易な再現手順を用意後、(そのときにPreferenceServiceのDateTime保存方法に変更が入っていなければ)再度新たなIssueとして立てたいと思います。
ご協力ありがとうございました。

@b-wind
Copy link

b-wind commented Mar 8, 2021

少なくとも言語設定に寄ってデータの保存フォーマットが変わってしまうのはバグの元で有るように思います。

@pinterior
Copy link
Author

おおもとの原因(端末・設定によってはフォーマットが変わってしまう点)を主題にするのが伝わりやすそうですね。

@b-wind
Copy link

b-wind commented Mar 8, 2021

初回同意時は今日の日付になる実装です。

今日の日付が9月3日と解釈されうるなら、その後日本語(日本)のまま使い続けると9月までのプライバシーポリシーの更新はすべて無視されることになりそうですね。

@keiji
Copy link
Collaborator

keiji commented Mar 9, 2021

すみません。日付フォーマットが異なる件、こちらでも再現しました。
Localeの Countryを「United Kingdom」にすると Languageを「English」にすると日付も「01/01/0001 00:00:00」になりますね。

@b-wind
Copy link

b-wind commented Mar 9, 2021

今朝取れたピチピチのスクショです。
UK で初回同意、JP で表示の順で再現するはず。

image

@b-wind
Copy link

b-wind commented Mar 9, 2021

(画像がデカくて済みません)

先ほど再度取り直して貰いました。

UK での初回初回同意後の画面
image

JP での画面(再同意画面は表示されない)
image

念の為言語設定
image

@pinterior
Copy link
Author

初回同意時は今日の日付になる実装です。

(off-topicですが)表示されてから同意するまでのタイムラグに新しいプライバシーポリシーがデプロイされた時のことが気になったので、この動作について「やや疑問がある」としました。

@ghost
Copy link

ghost commented Mar 9, 2021

#49 (comment)

こちらの件ですが、以下の手順で概ね再現できたと思うのですがどうでしょうか。

  1. COCOAを未インストールの状態として、念のため自動バックアップもOffにしておく
  2. 端末日付を 2021/3/14 に変更する(7 で Parse 失敗する必要があるため、日付 > 12 である必要がある, Timezone の考慮のため 14 日の方が確実)
  3. 端末の言語設定を English (United Kingdom) に設定する
  4. COCOA をインストールして、初期設定を行う。この時点で PrivacyPolicyLastUpdateDateTime は 13/03/2021 になる (端末日付, GBロケール)
  5. 一旦 COCOA をタスクキルする(念のため)
  6. 端末の言語設定を日本語に設定する
  7. COCOA を起動すると、PrivacyPolicyLastUpdateDateTime の Parse に失敗し、その場合プライバシーポリシー再同意画面が表示される
  8. 同意せず、一旦 COCOA をタスクキルする(念のため)
  9. 端末の言語設定を English (United Kingdom) に戻す
  10. COCOA を起動すると プライバシーポリシー再同意画面は表示されず HomePage が表示される

つまり、(このissueのタイトルとは逆で) 7 番でプライバシーポリシー再同意画面が表示されるパターンが想定外の動作で、正しいのはプライバシーポリシー再同意画面は表示されない動作なのではないかと思っています。

@pinterior さんの状況 「プライバシーポリシー改定以前から使用し」 とは違っているのですが、改定(2020/12/15)以後は一切アプリ起動などしていなかった端末ということになるんでしょうか?その場合初回起動がいつ頃だったかはわかりますか?(さすがに昔の話すぎるとは思いますが...)

@ghost
Copy link

ghost commented Mar 9, 2021

もっとシンプルな別解があって、ただ今から再現させるのはちょっと面倒なのですが、

  1. 2020/12/15 以前に初回起動・初期設定完了済みとする
  2. GB ロケールに切り替えて、2020/12/15 以降にプライバシーポリシー再同意画面で同意する。この時点で PrivacyPolicyLastUpdateDateTime が "15/12/2020" になる
  3. JP ロケールに切り替えて、COCOA 起動すると、同様に DateTime の Parse に失敗してプライバシーポリシー再同意画面が表示される(以下は上記 [Android] 端末の言語を変更後「プライバシーポリシーの改定」が再表示される #49 (comment) の 7. 以下と同様)

こういうパターンもありうるかもしれません。。

@Guest126
Copy link

上記のログの中で

"2021/03/08 22:38:13","Info","termsType: PrivacyPolicy, lastUpdateDate: 15/12/2020 13:00:00, info.UpdateDateTime: 15/12/2020 13:00:00","IsReAgree","/Users/runner/work/1/s/Covid19Radar/Covid19Radar/Services

とあり、lastUpdateDate: 15/12/2020 13:00:00 の部分からログの上では改定に同意していることが伺えるため、別解パターンが正解で、「改定の確認を行っていない環境」というのが誤認であることも含めての close だと考えます。

@Guest126
Copy link

ただ今から再現させるのはちょっと面倒なのですが、

これについては上の方でプロキシを利用する方法が挙げられていましたが、当方では Android の SharedPreferences (/data/data/jp.go.mhlw.covid19radar/shared_prefs/jp.go.mhlw.covid19radar.xml) を rooted 環境で編集・保存することで再現を確認しています (non-root ならば Debug ビルドでも可) 。

@ghost
Copy link

ghost commented Mar 10, 2021

@Guest126 さん

ありがとうございます。見落としていましたがもろもろ納得してすっきりしました。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants