Partage
  • Partager sur Facebook
  • Partager sur Twitter

Firebase register id

Comment envoyer une notification sur son mobile depuis le navigateur

    19 juin 2018 à 22:17:43

    salut a tous ami zéro. je suis actuellement entrain de développer une application android utilisant firebase et je dois avouer l'avoir terminer mais cependant l me reste encore une dernière chose a faire: Notifier automatiquement un utilisateur lorsqu'une donnée est insérer dans firestore.

    Pour cela j'ai donc décider de le faire depuis le langage php. et d’après mes recherches voici le code que j'ai obtenu suive ce lien: 

    https://gist.github.com/prime31/5675017

    Cependant je ne comprend pas ce qu'est : le register_id ou device-token et comment faire pour l'obtenir depuis un navigateur (en utilisant javascript); 

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
    El Tailor
      21 juin 2018 à 15:20:27

      Vu que tu utilise firebase, tu as vu qu'il y avait une rubrique "cloud messaging" permettant d'envoyer des notifications à tes utilisateurs. Perso sur mon appli je crée des événements et notifie les gens intéressés des changements de l'event.

      Pour ça j'utilise cloud messaging et cloud function.

      Sinon : 

       - le token-device permet d'authentifier ton téléphone auprès de GCM.

       - le register_id permet à GCM de savoir à qui envoyer la notification. En gros ça peut être un token-device pour envoyer sur un appareil unique; ou un "topic" auquel les utilisateurs s'abonnent. Si c'est un topic alors tous les utilisateurs qui sont abonnés reçoivent la notification.

      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2018 à 0:23:06

        Merci. Mais les cloud functions c'est quoi en fait?
        • Partager sur Facebook
        • Partager sur Twitter
        El Tailor
          27 juin 2018 à 10:57:21

          ce sont des fonctions que tu crées en Javascript et qui sont stockées sur un serveur nodejs google. Ce serveur est lié à ton projet Firebase et tu as accès à ces fonctions, tu peux automatiser leur lancement en fonction d'un événement dans la BDD. 


          L'avantage d'utiliser ce type de fonction c'est que tu peux utiliser firebase admin qui permet de générer des notifications avec GCM.


          C'est la seule façon que j'ai trouvée d'envoyer mes notifications. Je posterais ce soir le code que j'utilise pour les cloudsfonctions et le code Android pour générer les notifications

          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2018 à 19:38:54

            OK je vois pouvez vous me donner des liens de cours qui parle de ces fonctions.
            • Partager sur Facebook
            • Partager sur Twitter
            El Tailor
              27 juin 2018 à 21:34:03

              Je n'ai pas suivi de cours openclassrooms mais ces vidéos : 

              (avant de copier mes codes regardez les vidéos pour mettre au moins en place l'environnement)

              Voici mes codes:

              var admin = require("firebase-admin");
              var serviceAccount = require("./serviceAccountKey.json");
              
              admin.initializeApp({
                  credential: admin.credential.cert(serviceAccount),
                  databaseURL: "https://adiil-app.firebaseio.com"
              });
              
              db = admin.database();
              exports.sendNotification = functions.firestore.document('users/{userId}').onCreate((snap, context) =>
              
                  var payload = {
                      data: {
                          title: snap.data().name,
                          body: "fichier ajouté",
                      }
                  }
              admin.messaging().sendToTopic("topic-file-added", payload);
              })

              je n'ai pas testé cette solution je viens de l'adapter pour votre cas donc possible que ce soit à revoir (https://firebase.google.com/docs/functions/firestore-events

              Coté android nous avons : 

              MyFirebaseInstanceIDService :

              public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
              
                  private static String TAG = "Registration";
              
                  @Override
                  public void onTokenRefresh() {
                      // Get updated InstanceID token.
                      String refreshedToken = FirebaseInstanceId.getInstance().getToken();
                      Log.d(TAG, "Refreshed token: " + refreshedToken);
              
                      // TODO: Implement this method to send any registration to your app's servers.
                      System.out.println("Registration.onTokenRefresh TOKEN: " + refreshedToken );
                  }
              }

              MyFirebaseMessagingService : 

              public class MyFirebaseMessagingService extends FirebaseMessagingService {
              
                  private static HashMap<String, Class> classHashMap = new HashMap<>();
              
                  @Override
                  public void onMessageReceived(RemoteMessage remoteMessage) {
                      showNotification(remoteMessage.getData());
                  }
              
                  private void showNotification(Map<String, String> notification) {
              
                      NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
                      builder.setSmallIcon(R.drawable.adiil_notification);
                      builder.setContentTitle(notification.get("title"));
                      builder.setContentText(notification.get("body"));
                      builder.setStyle(new NotificationCompat.BigTextStyle()
                              .bigText(notification.get("body")));
                      builder.setAutoCancel(true);
              
                      classHashMap.put("event", ViewEventActivity.class);
                      classHashMap.put("idea", ViewIdeaActivity.class);
              
                      Intent resultIntent  = new Intent(this, ClassToOpen.class);
                      TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
              
                      stackBuilder.addNextIntent(resultIntent);
                      PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
                      builder.setContentIntent(resultPendingIntent);
                      builder.setDefaults(Notification.DEFAULT_SOUND);
              
                      NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
              
                      notificationManager.notify(0, builder.build());
                  }
              }



              -
              Edité par PheniXosBurn 27 juin 2018 à 22:41:55

              • Partager sur Facebook
              • Partager sur Twitter

              Firebase register id

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown