Ich verwende FCM, um Benachrichtigungen in meiner App bereitzustellen. Alles hat gut funktioniert, aber jetzt habe ich festgestellt, dass das Token bei der ersten Installation null ist, wenn ich meine Anwendung mit Android Studio (nicht von GooglePlay) installiere. Wenn ich meine App schließe und neu starte, ist das Token nicht mehr null. Was verursacht dieses Problem und wie kann ich es vermeiden?Android: Firebase-Token ist null beim ersten Lauf
InstanceIDService:
public class InstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);
}
private void registerToken(String token) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("Token",token)
.build();
Request request = new Request.Builder()
.url("url_to_registration_script")
.post(body)
.build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
In MainActivity:
FirebaseMessaging.getInstance().subscribeToTopic("topic");
String token = FirebaseInstanceId.getInstance().getToken();
Log.d("TOKEN", token);
Letzte Log-Returns null, wenn App installiert und gestartet wird zum ersten Mal
Registrierung Skript:
<?php
if (isset($_POST["Token"])) {
$_uv_Token=$_POST["Token"];
$conn = mysqli_connect("localhost","user","pass","db") or die("Error connecting");
$q="INSERT INTO users (Token) VALUES ('$_uv_Token') "
." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';";
mysqli_query($conn,$q) or die(mysqli_error($conn));
mysqli_close($conn);
}
?>
Mein Zweifel ist, warum wir dies jedes Mal aufrufen müssen FirebaseMessaging.getInstance(). SubscribeToTopic ("topic"); bevor Token-Instanz abgerufen wird. – Ruban