cocoa-mhlw / cocoa

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

接触の可能性の通知は出るが「陽性者との接触は確認されませんでした」と表示される

keiji opened this issue · comments

不具合の内容 / Describe the bug

サポートチームを通じて利用者の方からの報告。

「接触の可能性」の通知が出たので通知からCOCOAを開いたが「過去14日間の接触」画面に○分間という表示がでない(接触の画面自体は出る)。

ホーム画面から「陽性登録者との接触結果を確認」ボタンを押すと「陽性者との接触は確認されませんでした」と表示される。

再現手順 / Steps to reproduce

再現方法不明

期待される挙動 / Expected behavior

「接触の可能性」の通知が出たなら「過去14日間の接触」画面に接触情報が表示される。

仮に万が一、過去14日より前の接触情報が得られた場合は、接触の通知を出さない。

スクリーンショット / Screenshots

掲載許可確認中

動作環境 / Environments

  • デバイス:(例:Pixel 5、iPhone 6 等)
  • OS:iOS
  • バージョン:COCOA v2.0.0

その他 / Additional context

スクリーンショット、詳細なiOSバージョン、デバイス名については、サポートチームを通じて報告者の方に掲載の許諾をお願いしてます。


Internal IDs:

  • Bug 6805

ENv1でも同様の現象はあったが、あれはシステムに接触情報をリクエスト(通知が表示)した後で、接触が閾値を超えていなかったケースだった。

COCOA v2.0.0からは通知はCOCOAが出している。DailySummaryとExposureWindowをチェックして、閾値を超えている場合にしか通知を出さない。通知が出たと言うことは、閾値を超える接触があったと考えているので、COCOA1系とは異なる理由で発生していると考える。

現時点で1つの仮説は「ENから15日より前の接触データを得ている」と言うことがある。

ENから受け取った接触データを保存するときに、閾値を超えているかはチェックしているが、過去14日以内のものかはチェックしていない。
これはENが情報を保持している期間が過去14日間とされているため。しかし、厳密に14日間と言うわけではなさそうで、接触チェックのログで値の積算が26日間消えなかった消えなかったという報告( #961 (comment) )もある。

public async Task ExposureDetectedAsync(ExposureConfiguration exposureConfiguration, long enVersion, IList<DailySummary> dailySummaries, IList<ExposureWindow> exposureWindows)
{
_loggerService.Debug("ExposureDetected: ExposureWindows");
var enVersionStr = enVersion.ToString();
var (newDailySummaries, newExposureWindows) = await _exposureDataRepository.SetExposureDataAsync(
dailySummaries.ToList(),
exposureWindows.ToList()
);
var exposureRiskCalculationConfiguration = await _exposureRiskCalculationConfigurationRepository
.GetExposureRiskCalculationConfigurationAsync(preferCache: false);
_loggerService.Info(exposureRiskCalculationConfiguration.ToString());
bool isHighRiskExposureDetected = newDailySummaries
.Select(ds => _exposureRiskCalculationService.CalcRiskLevel(
ds,
newExposureWindows.Where(ew => ew.DateMillisSinceEpoch == ds.DateMillisSinceEpoch).ToList(),
exposureRiskCalculationConfiguration
)
)
.Any(riskLevel => riskLevel >= RiskLevel.High);
if (isHighRiskExposureDetected)
{
_ = _localNotificationService.ShowExposureNotificationAsync();
}
else
{
_loggerService.Info($"DailySummary: {dailySummaries.Count}, but no high-risk exposure detected");
}

一方、表示の時には過去14日間を条件に取得している。

public Command OnClickExposures => new Command(async () =>
{
try
{
UserDialogs.Instance.ShowLoading(AppResources.Loading);
loggerService.StartMethod();
var exposureRiskCalculationConfiguration = await exposureRiskCalculationConfigurationRepository
.GetExposureRiskCalculationConfigurationAsync(preferCache: true);
loggerService.Info(exposureRiskCalculationConfiguration.ToString());
var dailySummaryList = await _exposureDataRepository.GetDailySummariesAsync(AppConstants.DaysOfExposureInformationToDisplay);
var dailySummaryMap = dailySummaryList.ToDictionary(ds => ds.GetDateTime());
var exposureWindowList = await _exposureDataRepository.GetExposureWindowsAsync(AppConstants.DaysOfExposureInformationToDisplay);
var userExposureInformationList = _exposureDataRepository.GetExposureInformationList(AppConstants.DaysOfExposureInformationToDisplay);
var hasExposure = dailySummaryList.Count() > 0 || userExposureInformationList.Count() > 0;
var hasHighRiskExposure = userExposureInformationList.Count() > 0;
foreach (var ew in exposureWindowList.GroupBy(exposureWindow => exposureWindow.GetDateTime()))

つまり、14日より前の接触情報がENからくると、COCOAはチェックせずに保存した上で「接触の可能性」通知を出す。
表示の時には過去14日間の情報だけ取得するので「接触無し」が表示され、報告のあった現象と符合する。

端末の接触データを取り出す方法がないので確証はないが、追加の情報があるまで次の方針で改善を進める。

  • 通知を出す条件として「過去14日以内であること」を追加する
  • #928 を進める(こういうとき、接触データを確認できれば検証が簡単になる)

通知を出す条件として「過去14日以内であること」を追加する

EN API の正確な内部仕様が分からない状況ではこれはあった方が良いですね。
(ここが14日以内では無くなる可能性はあるんでしょうか)

本件とは関係無いですが、「通知を出した日付」から「過去14日の接触」画面を閲覧するまでに間が開いた場合の挙動は少し気になりました。
この想定の場合画面を見た時点では14日以上前の時点での記録なので見られなくても問題無いとは思いますが、一応仕様としては決まっていた方が良いかなと。

#752 との関連も気になります。

ああ、 #752 もiOSで起きたことなんですよね。

(ここが14日以内では無くなる可能性はあるんでしょうか)

あると思います。例えば10日以内にするとか。
ただ、その場合はバージョンアップで対応するのが良いと思います。

「通知を出した日付」から「過去14日の接触」画面を閲覧するまでに間が開いた場合の挙動は少し気になりました。

それもエクスポート機能があれば……いや、エクスポートされるJSONは一般の利用者にわかりやすい表示じゃないので、「14日より前の接触」みたいな画面を作るという手もありますね。

運用でカバーするなら「1日以上、接触の確認を開かないと古い接触情報は見えなくなるよ(外形的には消えたように見える)」と案内する方法もあります。

本Issueについては、これから同様の現象の発生が増加するのか、減少するのか。一定程度出続けるのか(その割合は?)など、気にしておいてもらえるよう、サポートチームにもお願いしてあります。