我正在学习Contact Tracing API(Apple is releasing for iOS)的新in partnership with Google。
我没有考虑maxKeyCount
上CTExposureDetectionSession
属性的关系,以及它与addPositiveDiagnosisKeys: completion:
方法的关系。
我的理解CTExposureDetectionSession
是允许应用程序要求框架开始尝试将已发布的诊断键列表与捕获的滚动接近标识符的本地数据库进行匹配的对象。
该应用程序将从在新 session 上调用activateWithCompletion:
方法开始,然后一次或多次调用addPositiveDiagnosisKeys:
,以最终通过调用finishedPositiveDiagnosisKeysWithCompletion:
通知框架不再添加任何键。
最后一次调用还将指示该块在检测完成时运行,将使用CTExposureDetectionSummary
对象调用该块,以通知设备已暴露给其的诊断密钥数量。
我不明白的是maxKeyCount
属性文档说:
此属性包含一次可提供给此API的最大密钥数。该属性的值在每个操作完成之后和调用完成处理程序之前更新。使用此属性可限制密钥下载,以避免在内存中过度缓冲密钥。
但是addPositiveDiagnosisKeys:
方法说:
异步将指定的密钥添加到 session 中,以允许检查它们的公开状态。每次对该方法的调用都必须包含比当前值指定的键更多的键。maxKeyCount
似乎是最大值,但addPositiveDiagnosisKeys:
要求我用比最大值更多的键来调用它。
我是否希望使用先前发送的列表的 super 列表来调用该方法? 这似乎与“避免在内存中过度缓存键”部分不太吻合-如果我必须使用不断增长的键列表。This property’s value updates after each operation complete
是什么部分?
最佳答案
maxKeyCount
的文档缺少而不是。
Android Contact Tracing API documentation有一个类似的接口:
/**
* Provides a list of diagnosis keys for contact checking. The keys are to be
* provided by a centralized service (e.g. synced from the server).
*
* When invoked after the requestProvideDiagnosisKeys callback, this triggers a * recalculation of contact status which can be obtained via hasContact()
* after the calculation has finished. *
* Should be called with a maximum of N keys at a time. */
Task<Status> provideDiagnosisKeys(List<DailyTracingKey> keys);
/**
* The maximum number of keys to pass into provideDiagnosisKeys at any given * time.
*/
int getMaxDiagnosisKeys();
正如Paulw11在a comment中建议的那样,
maxKeyCount
属性似乎是一个旨在读取的值,该值统计要在一次调用中向API发送多少个诊断键以进行匹配。call 者应在每次通话前重新检查该值,因为该值可能会在每次通话后更新。
然后,
addPositiveDiagnosisKeys:
的固定文档应为:每次对此方法的调用必须而不是所包含的键超过当前的值所指定的键。