2017-07-06 2 views
0

Pouvons-nous créer des services de repos pour l'envoi d'une notification à l'application Android sans utiliser la messagerie Cloud de Cloud Firebase/Google Cloud Messaging ou un autre outil de messagerie cloud? Si oui, comment cela est-il possible? J'ai cherché la même chose mais je n'ai pas pu obtenir le résultat approprié. Le résultat obtenu est que les services REST sont combinés avec l'outil cloud messenger, mais je souhaite créer des services grâce auxquels je pourrais facilement envoyer une notification sans console Cloud Messenger ouverte.Pouvons-nous envoyer une notification globalement sans utiliser firebase?

Code pour gérer les données de php

private void handleNotification(String message) { 
    Log.e(TAG, "===========================messaging 4======="); 

    if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) { 

     Intent intent= new Intent(this,MainActivity.class); 
     intent.putExtra("message",message); 
     intent.putExtra("imageUrl",imageUrl); 
     intent.putExtra("time_stamp",timeStamp); 

     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 


     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

     final PendingIntent pendingIntent = PendingIntent.getActivity(
       this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 


     Uri notificationSound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notifiBuilder=new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("NOTIFICATION !!") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(notificationSound) 
       .setContentIntent(pendingIntent) ; 

     NotificationManager notificationManager= 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0,notifiBuilder.build()); 


     Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION); 
     pushNotification.putExtra("message", message); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification); 

     // play notification sound 
     /* NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext()); 

     notificationUtils.playNotificationSound();*/ 


    } 
} 

private void handleDataMessage(JSONObject json) { 
    Log.e(TAG, "===========================messaging 4======="); 
    Log.e(TAG, "push json: " + json.toString()); 


    try { 
     JSONObject data = json.getJSONObject("data"); 

     String title = data.getString("title"); 
     String message = data.getString("message"); 
     boolean isBackground = data.getBoolean("is_background"); 
     String imageUrl = data.getString("image"); 
     String timestamp = data.getString("timestamp"); 
     JSONObject payload = data.getJSONObject("payload"); 

     Log.e(TAG, "title: " + title); 
     Log.e(TAG, "message: " + message); 
     Log.e(TAG, "isBackground: " + isBackground); 
     Log.e(TAG, "payload: " + payload.toString()); 
     Log.e(TAG, "imageUrl: " + imageUrl); 
     Log.e(TAG, "timestamp: " + timestamp); 


     if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) { 
      // app is in foreground, broadcast the push message 

      Intent intent= new Intent(this,MainActivity.class); 
      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
      final PendingIntent pendingIntent = PendingIntent.getActivity(
        this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 


      Uri notificationSound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

      NotificationCompat.Builder notifiBuilder=new NotificationCompat.Builder(this) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle("NOTIFICATION data message!!") 
        .setContentText(message) 
        .addAction(R.mipmap.ic_accept,"ACCEPT",pendingIntent) 
        .addAction(R.mipmap.ic_decline,"DECLINE",pendingIntent) 
        .setAutoCancel(true) 
        .setSound(notificationSound) 
        .setContentIntent(pendingIntent) ; 

      NotificationManager notificationManager= 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

      notificationManager.notify(0,notifiBuilder.build()); 


      Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION); 
      pushNotification.putExtra("message", message); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification); 

      // play notification sound 

     } else { 
      // app is in background, show the notification in notification tray 

      Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class); 
      resultIntent.putExtra("message", message); 

      // check for image attachment 
      if (TextUtils.isEmpty(imageUrl)) { 
       showNotificationMessage(getApplicationContext(), title, message, resultIntent); 
      } else { 
       // image is present, show notification with image 
       showNotificationMessageWithBigImage(getApplicationContext(), title, message, resultIntent, imageUrl); 
      } 
     } 
    } catch (JSONException e) { 
     Log.e(TAG, "Json Exception: " + e.getMessage()); 
    } catch (Exception e) { 
     Log.e(TAG, "Exception: " + e.getMessage()); 
    } 
} 
+0

Avec gcm ou fcm, vous n'avez pas besoin d'ouvrir la console pour envoyer des messages. Vous pouvez envoyer une requête http json à leur serveur et ils s'occuperont du reste. Voir la [documentation] (https://firebase.google.com/docs/cloud-messaging/http-server-ref) – RobCo

+0

J'ai lu la documentation mais je n'ai toujours pas obtenu ma réponse –

Répondre

0

Cela peut être un processus plus long et difficile

  1. Créer un service d'arrière-plan dans votre application qui ne cesse de vérifier votre serveur web pour les nouveaux messages après chaque certain intervalle (peut être quelques secondes ou minutes).
  2. Ce service est susceptible d'être tué ou nettoyé par le système d'exploitation Android. Par conséquent, vous devrez peut-être enregistrer un AlarmManager qui appelle les Services aux intervalles.
  3. Le service d'arrière-plan appellera une API de serveur Web avec un ID unique (peut être un ID de périphérique ou un jeton d'accès)
  4. Sur votre serveur Web, vous pouvez créer une API qui, à la réception d'une requête de l'appareil, utilise le UniqueID passé, vérifie s'il y a un message ou non. S'il y a un message, il répond avec les données.
  5. Sur l'App, à la réception des données du serveur web, vous pouvez faire le nécessaire.

Un processus similaire est utilisé par FCM/GCM. Mais il garantit la notification, car GooglePlayServices fonctionne toujours sous Android en arrière-plan.

Cette procédure peut vous faire faire ce que vous voulez dans une certaine mesure, mais, comme mentionné précédemment, peut être difficile et difficile.

+0

pourriez-vous s'il vous plaît m'aider avec le programme pour le même? Vous pouvez aussi partager du code sur mon identifiant d'email. @Atish Agrawal –

+0

@exampleone Je peux vous aider. Toute la communauté StackOverflow est là pour votre aide. S'il vous plaît, montrez-nous ce que vous avez fait et ce que vous essayez d'accomplir pour que nous puissions vous aider. –

+0

Je veux envoyer une notification à l'application Android, sans utiliser la console Firebase. pour cela j'ai utilisé PHP comme backend. Je cours mon code php et obtient le succès du résultat: 1 mais toujours pas de notification. De plus ** Json Exception: Value {"image": "", "is_background": faux, "titre": "hey all", "message": "démo", "horodatage": "2017-07-27 12: 22:41 "} aux données de type java.lang.La chaîne ne peut pas être convertie en JSONObject ** obtenir cette erreur dans logcat –

0

Depuis GCM utilise une connexion TCP simple, vous pouvez le faire par urself.

Tout ce dont vous avez besoin est d'un serveur TCP unique et d'un client TCP sur chaque périphérique dont vous avez besoin.

Sera presque identique, mais il consommera plus de batterie.

+0

auparavant j'envoyais une notification en utilisant Firebase , peut-il être réalisé par les services REST? –

+0

Vous pouvez, mais ce ne sera pas si bon. Par exemple, vous pouvez envoyer une requête au client pour lui demander si vous avez un nouveau message pour le client actuel toutes les N sec/min. – DEADMC