Google recently introduced stricter target API level requirements for applications published to the Play Store. ODK Collect currently targets Android 9 but as soon as Android 11 is released, it will need to target Android 10. This will likely be in fall 2020.
This has two major implications: Collect will no longer be able to use files in
/sdcard/odk/ and it will no longer be able to read device-unique identifiers such as the International Mobile Equipment Identity which is used as
deviceId (sent with every form submission and form list request). Because these may have impact across the ecosystem, I'll start a thread for each change describing a proposed approach and soliciting feedback. See Collect will need to stop using /sdcard/odk for files for the thread about the file storage change.
The ODK XForms specification for
deviceId describes it as "Unique identifier of device." No unique device identifier will be available to Collect anymore. As an alternative, I propose that we use
FirebaseInstanceId which uniquely identifies each app instance. This is recommended by the Android best practices. An alternative would be for Collect to generate and store its own UUID but I don't see any benefit to doing that given that Firebase is already in use for crash and usage reporting. I propose we prefix it with
firebaseid: so that the source of the id is easily identifiable.
Both Aggregate and Central currently ignore
deviceId as part of their primary functions (it does get logged which can be useful for troubleshooting). That said,
deviceId can be requested as part of a form definition. There are certainly advanced users relying on those identifiers. Are there specific users who should be added to this conversation? @Batkinson comes to mind.
Although I don't think this will be very disruptive, I think we should delay making the change as long as we can so that it can be communicated. This means that we would make it in late summer of 2020 when we will be required to target API 29. In the mean time, we can use a community update to let as many system and form designers know as possible that the change is coming. Is there anything else we should do to alert users? We could do something like show a dialog to enumerators using a form that requests
deviceId but I'd rather avoid that if we can because it would be confusing for enumerators.