Skip to content

Zero-Tap Sign-In: decide our answer to the April 2027 Restore Credentials requirement #15

Description

@StaticHumStudio

Google Play will require apps that support user sign-in (optional or mandatory) to automatically
restore sign-in state on device-to-device migration, via the Android Restore Credentials API.
Games are exempt. Announced 2026-08 on the Android Developers blog:
https://android-developers.googleblog.com/2026/08/app-quality-memory-optimization-secure-onboarding.html

Nine Lives is not a game and ABS server login is mandatory, so on paper we are in scope.

Where we stand today

We deliberately do the opposite. app/src/main/res/xml/data_extraction_rules.xml excludes
nine_lives_secure_prefs.xml from BOTH cloud-backup and device-transfer, and
backup_rules.xml excludes it for API < 31. A user moving to a new phone re-enters the server
URL and their credentials. That was the correct call for a bearer token pointed at a server we
do not control. Play is about to score it as a defect.

The structural problem

Restore Credentials assumes a backend that can mint and validate a restore key. Our "backend" is
whatever Audiobookshelf instance the user runs, and ABS has no such endpoint. The sanctioned
implementation does not exist for a self-hosted client.

Options (no work authorized yet)

  1. Migrate the non-secret half (server URL + username) through device-transfer, leave the
    password/token excluded. New device lands on a pre-filled login instead of a blank one.
    Cheap, and probably a defensible good-faith answer.
  2. Wait for the actual policy text. "Supporting user sign-in" reads like it was written for
    first-party-account apps. There may be a carve-out for clients authenticating to user-owned
    servers.
  3. Full Restore Credentials against ABS, which means landing a restore-key endpoint upstream in
    Audiobookshelf. Not ours to start unilaterally.

Next action

Re-read the policy when Google publishes the real language (expected before the April 2027
enforcement date), then pick an option. Jeff explicitly declined a prototype for now.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions