Aide à la migration firebase FCM ver HTTP v1

CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 - 23 août 2024 à 16:03
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 - 22 sept. 2024 à 09:02

Bonjour le forum,

Je viens vous demander conseils pour faire la migration firebase FCM vers HTTP v1.

J'ai lu la documentation firebase et modifier les paramètres dans mon appli mais ça ne fonctionne pas.

Lorsque je suis sur la console firebase je peux envoyer une notification push "test" sur mon AVD sur Android Studio mais pas de résultat pour un téléphone physique.

j'ai suivi cette doc:

https://firebase.google.com/docs/cloud-messaging/migrate-v1?hl=fr

Voici quelques infos: (j'ai volontairement laissé l'ancienne écriture)

class ApiClient.java

public class ApiClient {

    private static Retrofit retrofit = null;

    public static Retrofit getClient() {
        if (retrofit == null) {
            retrofit = new Retrofit.Builder()
                    //.baseUrl("https://fcm.googleapis.com/fcm/")
                    .baseUrl("https://fcm.googleapis.com/v1/projects/"ID_PROJECT"/messages:send")
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

construction entête de message:

    public static HashMap<String, String> getRemoteMsgHeaders() {
        if (remoteMsgHeaders == null) {
            remoteMsgHeaders = new HashMap<>();
            remoteMsgHeaders.put(
                    REMOTE_MSG_AUTHORIZATION,

//"key=AAAAYC40Jzc:APA91bHe...yo1Rk0I0PM4bp"

                    "Bearer ya29.a0AcM612zt4_HV2Eug...XlZw017x"
                    
            );
            remoteMsgHeaders.put(
                    REMOTE_MSG_CONTENT_TYPE,
                    "application/json"
            );
        }
        return remoteMsgHeaders;
    }

Je ne suis pas sur d'avoir vraiment fait ce qu'il faut.

Merci d'avance pour votre concours 


3 réponses

CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 1
18 sept. 2024 à 16:18

Bonjour Bruno,

merci pour ce lien il m'apporte beaucoup de réponses.

Je reviendrais faire un point sur mon avancement.

Cordialement


1
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 1
11 sept. 2024 à 20:11

bonjour,

bon, après beaucoup de tentatives j'ai obtenu ce code:

    public void sendPushNotification(String fcmToken, String title, String body, String accessToken) {
        try {
            URL url = new URL("https://fcm.googleapis.com/fcm/send");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Authorization", "Bearer " + accessToken);
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);

            JSONObject message = new JSONObject();
            message.put("to", fcmToken);
            JSONObject notification = new JSONObject();
            notification.put("title", title);
            notification.put("body", body);
            message.put("notification", notification);

            OutputStream os = conn.getOutputStream();
            os.write(message.toString().getBytes("UTF-8"));
            os.close();

            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String response;
            StringBuilder sb = new StringBuilder();
            while ((response = br.readLine()) != null) {
                sb.append(response);
            }
            br.close();
            Log.d("FCM", "Response: " + sb.toString());
        } catch (Exception e) {
            Log.e("FCM", "Error sending push notification", e);
        }
    }

toutefois pour l'essayer il me faut le jeton d'accès (accessToken) et je n'arrive pas à l'obtenir.

Si quelqu'un a une idée?

cordialement

0
BunoCS Messages postés 15496 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 décembre 2024 3 912
13 sept. 2024 à 09:08
0
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 1
21 sept. 2024 à 16:21

Bonjour,

je parviens à obtenir un token mais il n'a pas l'air d'étre bien formaté

ya29.c.c0ASRK0GZgXxYMXo3CAY95E-nT4aHKhn4g_NUb91eZ5cjFYXxCc0vf6V23x_JFdRZ41no5XRiJIKTrZxQRHejAwvgKpNBJG7CSKnyOQKNreWuewu_x0zCBJwEaPu4b[...]uJk-rRJucya8-yW043pzVnizV8bZOQm8zW4Fok-bX7-SlJbtS9c289QyczYjSczbSeSIX33MIl3VqaMzer-tg122sjojrjatSlgzxstMXmkoJu7pdaxhIBtZ_oxh4U1q16wxfqBVkaoj9FR6phYsRbfn0rMVQuIo6JM77f5XUjddMIWhx84gyRSI-Vydq5tr

il devrait ressembler plus ou moins a ça:

ya29.c0ASRK0GZgXxYMXo3CAY95E-nT4aHKhn4g_NUb91eZ5cjFYXxCc0vf6V23x_JFdRZ41no5XRiJIKTrZxQRHejAwvgKpNBJG7CSKnyOQKNreWuewu_x0zCBJwEaPu4bCPNDKo5oXJntf3tuYybde1mvfP7-AFkeYJf80mSrOXdr-0grFe95ReLVKUUg9cVUtCfGZoXu1PwZFQ86KnjcFgn2S8-4s4[...]WxlbueSaiVI38VI99o6Jyc6voocboRt3oR5tdcjnaZUVZSYrqlouUeQiWhVZor-Jqw6r2QxaZB9fFuJk-rRJucya8-yW043pzVnizV8bZOQm8zW4Fok-bX7-SlJbtS9c289QyczYjSczbSeSIX33MIl3VqaMzer-tg122sjojrjatSlgzxstMXmkoJu7pdaxhIBtZ_oxh4U1q16wxfqBVkaoj9FR6phYsRbfn0rMVQuIo6JM77f5XUjddMIWhx84gyRSI-Vydq5tr

La différence entre les deux se trouve au début du token

j'utilise ce code pour l'obtenir

try {
            String jsonString = "{\n" +
                    "    \"type\": \"service_account\",\n" +
                    "    \"project_id\": \"***\",\n" +
                    "    \"private_key_id\": \"***\",\n" +
                    "    \"private_key\": \"-----BEGIN PRIVATE KEY-----\\***\\n-----END PRIVATE KEY-----\\n\",\n" +
                    "    \"client_email\": \"***@***\",\n" +
                    "    \"client_id\": \"***\",\n" +
                    "    \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n" +
                    "    \"token_uri\": \"https://oauth2.googleapis.com/token\",\n" +
                    "    \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n" +
                    "    \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-yyy%40xxx.iam.gserviceaccount.com\",\n" +
                    "    \"universe_domain\": \"googleapis.com\"\n" +
                    "}\n";

            InputStream stream = new ByteArrayInputStream(jsonString.getBytes(StandardCharsets.UTF_8));
            GoogleCredentials googleCredentials = GoogleCredentials.fromStream(stream).createScoped(Lists.newArrayList(firebaseMessagingScope));
            googleCredentials.refresh();
            Log.d("Token","json Google credentials: " + googleCredentials.getAccessToken().getTokenValue());

            return googleCredentials.getAccessToken().getTokenValue();

J'ai testé différentes méthodes mais pas de résultat.

J'ai raté un truc c'est sûr mais quoi?

cordialement


0
CR16_Padawan Messages postés 61 Date d'inscription mercredi 7 juin 2023 Statut Membre Dernière intervention 22 septembre 2024 1
22 sept. 2024 à 09:02

Re,

finalement ça fonctionne. je ne saurais expliquer pourquoi car j'ai bidouillé un peu à gauche, à droite sur mon programme et firebase donc pas d'idée précise pour la résolution.

Maintenant reste plus pour moi qu'à comprendre pourquoi mes notifications ne s'affichent pas avec les caractéristiques spécifiées dans mon code lors de la réception d'une notification.

Si une petite idée de votre part passe par là je suis preneur.

merci pour les renseignements et les enseignements;

Cordialement.

CR16_Padawan

0