Как определить, истек ли токен или нет зарегистрированного уведомления 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>