Aide à la migration firebase FCM ver HTTP v1
CR16_Padawan Messages postés 61 Date d'inscription Statut Membre Dernière intervention -
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
- Http //cast2tv.net/
- Http - Guide
- Http //192.168.l.l - Guide
- Http //192.168.l.49.1 anycast setup en francais ✓ - Forum Téléphones & tablettes Android
- Problème VNC HTTP ✓ - Forum Logiciels
- Cast2tv.net hotel ✓ - Forum Windows
3 réponses
Bonjour Bruno,
merci pour ce lien il m'apporte beaucoup de réponses.
Je reviendrais faire un point sur mon avancement.
Cordialement
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
Hello,
J'ai trouvé ce guide qui pourrait t'aider je pense:
https://firebase.google.com/codelabs/use-the-fcm-http-v1-api-with-oauth-2-access-tokens?hl=fr#0
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
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