Как определить, истек ли токен или нет зарегистрированного уведомления FCM Firebase на сервере приложений?
Я использую следующий код для отправки уведомления FCM с сервера на устройство:
String fcmServerKey = externalConfig.getFcmServerKey();
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(HTTPS_FCM_GOOGLEAPIS_COM_FCM_SEND);
httpPost.setEntity(new StringEntity(message, ContentType.create("application/json")));
httpPost.setHeader("Authorization", "key=" + fcmServerKey);
CloseableHttpResponse closeableHttpResponse= httpclient.execute(httpPost);
В приведенном выше коде, когда я получаю объект ответа closeableHttpResponse
, как я могу определить, истек ли токен fcm, используемый для отправки этого запроса, или не зарегистрирован?
Когда из панели инструментов приложения firebase я пытаюсь отправить уведомление на устройство, используя его токен fcm, и после удаления приложения с устройства вижу Failed
на пожарной панели приборов, при наведении курсора на Failed
я вижу Unregistered registration token
,
Как я могу обнаружить вышеописанную ошибку Unregistered registration token
из объекта ответа API closeableHttpResponse
?
2 ответа
Используйте API-интерфейс сервера, чтобы получить связанную информацию о маркере регистрации устройства. Если ответ пуст, это означает, что токен истек или не зарегистрирован.
Пример запроса GET
https://iid.googleapis.com/iid/info/nKctODamlM4:...clJONHoA?details=true
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
Пример результата
HTTP 200 OK
{
"application":"com.iid.example",
"authorizedEntity":"123456782354",
"platform":"Android",
"attestStatus":"ROOTED",
"appSigner":"1a2bc3d4e5",
"connectionType":"WIFI",
"connectDate":"2015-05-12
"rel":{
"topics":{
"topicname1":{"addDate":"2015-07-30"},
"topicname2":{"addDate":"2015-07-30"},
"topicname3":{"addDate":"2015-07-30"},
"topicname4":{"addDate":"2015-07-30"}
}
}
}
Создать этот класс в вашем пакете
import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
import com.google.gson.Gson;
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
//Getting registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
//Displaying token on logcat
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
Context context = getApplicationContext();
//You can implement this method to store the token on your server
//if token is already inserted then update token in your server
}
}
и добавьте это в свой AndroidManifest.xml
в
<application>
..............
<service
android:name=".Listeners.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
</application>