es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer para enviar el token de FCM a mi servidor PHP?

Tengo exactamente la misma pregunta que https://stackoverflow.com/questions/60054798/how-to-send-fcm-token-id-to-php-server pero no tengo suficiente reputación para comentar allí.
He pasado 2 días en eso y me estoy volviendo loco.
He intentado muchas soluciones, pero nunca obtengo los resultados.
Todo lo que encuentro es demasiado complicado para mi nivel de principiante (o mi nivel de inglés), o está obsoleto.

Me gustaría tener la forma más sencilla de enviar el Token y el Device_ID (sé cómo obtener ambos) a mi servidor. No importa si es en formato JSON, con el método GET o POST, o cualquier otra cosa.
Solo una forma simple de hacerlo.
No quiero ninguna interfaz de usuario ni nada parecido. Una forma automática de enviar el token de FCM cuando se genera.

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "MyFirebaseMsgService";
    @Override
    public void onNewToken(String token) {
        String id = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
        sendRegistrationToServer(token, id);
    }
}

Solo necesito sendRegistrationToServer()

Muchas gracias de antemano.

EDIT
Finalmente lo conseguí funcionando con:
DeviceService.java

public interface DeviceService {
    @FormUrlEncoded
    @POST("fcm_token_register.php")
    Call<string> insertToken(@Field("token") String token, @Field("id") String id);
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("https://*myserver*/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
}

Llámalo así:

java
DeviceService service = DeviceService.retrofit.create(DeviceService.class);
Call<string> call = service.insertToken(token,id);
call.enqueue(new Callback<string>() {
@Override
public void onResponse(Call<string> call, Response<string> response) {
Log.d(TAG, "OK: "+response.toString());
}
@Override
public void onFailure(Call<string> call, Throwable t) {
Log.d(TAG, "Error: "+t.toString());
}
});

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El usuario está solicitando una forma sencilla de enviar el token de FCM y el ID del dispositivo a su servidor, sin complicaciones ni soluciones obsoletas. Ya han implementado el método onNewToken en su clase MyFirebaseMessagingService, que obtiene el token y el ID y llama a un método hipotético sendRegistrationToServer.

    Para implementar la funcionalidad de registro en el servidor, el usuario puede utilizar Retrofit, un cliente HTTP seguro para Android y Java.

    En primer lugar, necesitan definir una interfaz para la API del servidor utilizando las anotaciones @POST y @Field, como se muestra en el ejemplo de DeviceService. Esta interfaz especifica un único método de API insertToken que recibe dos parametros de tipo string, token e id. La anotación @FormUrlEncoded especifica que el cuerpo de la solicitud se codificará en el tipo MIME application/x-www-form-urlencoded.

    A continuación, se crea el objeto Retrofit con la URL base del servidor y un convertidor Gson para convertir entre cadenas JSON y objetos Java.

    Por último, el método insertToken se invoca creando una instancia de la interfaz DeviceService utilizando Retrofit y llamando a enqueue en el objeto Call resultante para ejecutar el método de la API de forma asíncrona. Los métodos onResponse y onFailure del objeto Callback se encargan de manejar la respuesta del servidor y los errores.

    Con este código, el token de FCM y el ID del dispositivo se enviarán al servidor mediante una simple solicitud POST HTTP cada vez que se genere un nuevo token por parte de Firebase.

Comments are closed.