FCM push-Benachrichtigungs-Problem :- "error":"NotRegistered"
Bin ich immer seltsame Problem senden push-Benachrichtigung auf android mit FCM.
Ziel :- Mit Fehler beim senden der push-Benachrichtigung
Unten ist das Szenario, ich habe die Funktion für das senden von push-Benachrichtigungen an android -
public static function SendMultipleNotificationAndroid($groups)
{
//your api key SERVER API KEY
$apiKey = Yii::$app->params['android_api_key'];
$url = 'https://fcm.googleapis.com/fcm/send';
$headers = array(
'Authorization:key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
foreach($groups as $resG){
$users = $resG['users'];
$msg = $resG['message'];
$type = $resG['notification_type'];
$notification_data = $resG['notification_data'];
$deviceTokens = [];
foreach($users as $resUser){
$deviceTokens[] = $resUser['device_token'];
//Add Friend badge count +1
Common::AddRemoveBadgeCount($resUser['user_id']);
}
if(!empty($deviceTokens)){
$fields = array(
'registration_ids' => $deviceTokens,
'priority' => 'high',
'collapse_key' => $resG['notification_type'],
'time_to_live' => 2419200,
"click_action" =>"NotificationListingActivity",
'data' => [
"title" => "ProjectName",
"body" => $resG['message'],
"action_tag" => $resG['notification_type'],
"message" => $resG['message'],
'notification_type' => $type,
'notification_data' => $notification_data,
'sound' => 'default',
]
);
//Print result
p($ch,0);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
curl_exec($ch);
}
}
curl_close($ch);
}
Also das Problem ist, wenn ich senden Sie die Meldung auf es funktioniert gut, aber wenn ich senden mehrere notification bekam ich Fehler jedes mal
<pre>Resource id #5</pre>{"multicast_id":4818908994630396118,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136045570022%c3bae3c6002e9358"}]}
<pre>Resource id #5</pre>{"multicast_id":5218359780835228544,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136046618669%c3bae3c6002e9358"}]}
Als wir Debuggen Sie den code, den wir haben-device-token in unserer Datenbank keine firewall Stoppt das senden von push-Benachrichtigungen.
Jedes mal, wenn ich den Aufruf über die Funktion bekam ich
"error":"NotRegistered"
Jede mögliche Hilfe Würde geschätzt.
Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weiß nicht viel über php, aber vor kurzem habe ich vor dem gleichen Problem in einem anderen Projekt, und ich habe beschlossen auf diese Weise :
Refere diese zuerst :
Wo finde ich den API-KEY für FB Cloud Messaging?
bekommen und aktualisierten API-Schlüssel, wie gezeigt, unten ein Schnappschuss
Laut doc sein, da das mobile Gerät die Prüfung nicht über Ihre app mehr installiert
Dies ist eine client-side - (Geräte -) Problem, nicht-service-Seite.
Mehrere Szenarien, die das verursachen kann:
berichtet der APNS-token ist ungültig.
Sehen https://developers.google.com/cloud-messaging/http-server-ref
Auf app startup, das ich überprüfen, um zu sehen, ob das token habe ich lokal gespeichert, passt das neue token. Wenn nicht, dann aktualisieren Sie das token auf meinem Server. Ich weiß auch das in
FirebaseInstanceIDService::onTokenRefresh
.Sehen, wenn Sie die app deinstalliert haben und Ihre Geräte-token wird geändert. Update der Geräte-token, und Ihre Fehler verschwunden sein
Während der Suche für die "NotRegistered" Problem, wir fanden die folgende ...
Am Gerät Ende, die Generierung der Geräte-notification token wurde getan, indem man folgenden code mal, wenn Benutzer zum ersten mal startet die app nach der installation.
Wurden wir mit einer anderen Klasse abgeleitet von "FirebaseMessagingService" erstellen /empfangen " - Benachrichtigungen. Aber die folgende Methode wurde fehlt in dieser Klasse.
Fanden wir, dass die oben beschriebene Methode wurde von FCM-system im Gerät bei jedem start der App. ( Die App wird nicht Deinstalliert, immer noch die Methode wurde mit verschiedenen token jeder Zeit. ) Und So nannten wir unsere Methode " sendRegistrationToServer(token);' zum senden der token auf unserem server, zusammen mit der 'DeviceId' und andere Daten zur Identifizierung. Wenn wir gesendet-Meldung von php-server auf dieses token, kehrte er "gesendet" anstatt "NotRegistered".
Habe ich eine 100-Prozent-Lösung, die ich hatte fix vor kurzem dieses Problem das Fehler auftreten, weil Sie senden diese Benachrichtigung auf einem Gerät, das nicht enthalten, die Ihre FB-setup-api-Schlüssel, Zum Beispiel, wenn Sie registrierter Benutzer, die Zeit, die registrierte Benutzer von verschiedenen FB-setup, so dass Ihr android-token war anders und Sie durch das senden einer Anfrage an andere FB-setup für die, die kein android-token denen, die Sie versuchen zu senden-Benachrichtigung(Nachricht) Sie müssten also sicherstellen, dass Ihre Benutzer-android-token-Generierung aus den gleichen FB-Projekt, welches Projekt Sie mit FB api-key