> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pushctl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Android troubleshooting

> Resolve Firebase, permission, registration, channel, and open-handler issues on Android.

<AccordionGroup>
  <Accordion title="Firebase initialization fails">Confirm that `google-services.json` belongs to the app package and the Google Services plugin runs for the app module. The SDK reuses the default Firebase app when one exists.</Accordion>
  <Accordion title="No installation appears">Call `Pushctl.initialize` from `Application.onCreate`, confirm internet access, verify that the embedded token uses the Client preset, and call `waitForRegistration` to receive the exact failure.</Accordion>
  <Accordion title="Registration times out">Confirm Firebase initializes with the app's `google-services.json` and that the device can reach Firebase and the Pushctl API.</Accordion>
  <Accordion title="A Firebase identifier exists but registration fails">Inspect the error from `waitForRegistration` or `onRegistrationFailed`. Verify network access, the Client token, and the Android platform configuration in Pushctl.</Accordion>
  <Accordion title="Android 13 never asks for permission">Call `requestPermission` from a visible `Activity`. Do not call it only during background startup.</Accordion>
  <Accordion title="The notification uses the wrong icon or channel">Initialize with `PushctlConfiguration` and set `notificationIcon`, `notificationChannelId`, and `notificationChannelName`. Existing channel properties may need to be changed by the user in system settings.</Accordion>
  <Accordion title="Notification opens are not routed">Register the click listener early, or forward a custom activity intent through `handleNotificationOpen`.</Accordion>
  <Accordion title="The user association is missing">Wait for confirmed registration, then call `login` after authentication and handle its callback. A later successful login replaces the previous ID, and a successful logout makes the installation anonymous.</Accordion>
  <Accordion title="Login or logout fails">Identity methods report an error when the installation is not registered or the Pushctl API rejects the update. Do not treat invocation alone as success.</Accordion>
</AccordionGroup>

<Tip>Check `registrationStatus`, `registrationError`, and `isRegistered` in `Pushctl.subscriptionState()` before comparing the installation ID with the dashboard.</Tip>
