Firebase su Android – io voglio disattivare firebase le notifiche su Android client

Sto usando Firebase console per inviare notifiche agli utenti.
Tuttavia voglio per consentire agli utenti di disattivare le notifiche.
Come faccio a disattivarli?

Io sono in grado di gestire (e stop) le notifiche tramite FirebaseMessagingService solo quando l’applicazione è in primo piano. Ma io non posso smettere di notifiche quando l’app è in background.

 

5 Replies
  1. 5

    Non so perché questo accade a voi (snippet di codice forse?), ma c’è un grosso peso soluzione definitiva: definire il proprio c2dm ricevitore nel manifesto e impostare la priorità alta (>0) quindi interrompere la notifica di elaborazione.

    GCM i messaggi vengono elaborati come ordinato trasmissioni, in modo da poter interrompere la catena di trasformazione, chiamando questo metodo:

    https://developer.android.com/reference/android/content/BroadcastReceiver.html#abortBroadcast()

    Se non si fa nulla nel vostro ricevitore e poi la prossima ricevitore elaborazione, che sarà il Firebase ricevitore.

    Si prega di notare: Firebase è l’invio di notifiche push per Remote Config modifiche. Quindi, se si utilizza il Telecomando Config quindi non è consigliabile per sopprimere il push dei dati.

    • In realtà, Firebase docs consiglia di utilizzare il push dei dati, invece di notifiche se si desidera avere il controllo completo su come viene gestito: firebase.google.com/docs/cloud-messaging/… citazione: “Utilizzare le notifiche quando si desidera FCM per gestire la visualizzazione di una notifica sul tuo client app per suo conto. Utilizzare i messaggi di dati quando si desidera che l’applicazione per gestire la visualizzazione o processo i messaggi sul tuo Android app client…”
    • Grazie. Utilizzando i dati push (attraverso una richiesta POST) sono in grado di gestire la notifica anche se l’app è in background. Ora, come posso inviare i dati per tutti i dispositivi senza specificare il token di ogni singolo dispositivo, nel mio file JSON? Attraverso Firebase console è possibile specificare “Segmento Utente”, ma se io non specificare l’elemento “a” nel file JSON, ho visualizzato l’errore 400.
    • Io non sono un esperto su questo argomento, ma per quanto posso dire quando si esegue il push dei dati in poi, in fondo si ignora la Firebase caratteristiche tutte insieme. Quindi, nessun invio di argomento abbonati o analytics è disponibile. In questo caso FB agisce come un relè a GCM e non interagisce con i dati inviati a tutti.
    • A quanto pare l’invio di dati ad argomenti è disponibile: firebase.google.com/docs/cloud-messaging/… È possibile firmare in su ogni dispositivo a un argomento e di inviare i dati spingere a tale argomento, quindi non c’è bisogno di monitorare il dispositivo token da soli.
  2. 12

    Non riuscivo a commento di sicurezza, ma rac’ commento mi ha aiutato molto.

    In realtà, Firebase docs consiglia di utilizzare il push dei dati, invece di
    le notifiche se si desidera avere il controllo completo su come è
    trattati: firebase.google.com/docs/cloud-messaging/… – citazione di: “Uso
    le notifiche quando si desidera FCM per gestire la visualizzazione di un messaggio di notifica
    il client app per suo conto. Utilizzare i messaggi di dati quando si desidera che l’applicazione per
    gestire la visualizzazione o processo i messaggi sul tuo Android client
    app…”

    Quindi, in pratica, ho cambiato il corpo per la notifica push richiesta:

    {
       "data": {
           "type" : "mytype"
        },
        "notification": {
            "title": "My Title",
            "body": "My Notification Message"
        },
        "to": "/topics/all"
    }

    A:

    {
       "data": {
           "type" : "mytype",
           "title": "My Title",
           "body": "My Notification Message"
        },
        "to": "/topics/all"
    }

    Ora la mia app chiamate onMessageReceived() ogni volta che, anche in background, e ho appena cambiato i metodi da utilizzare ottenuto la notifica del titolo e il messaggio push dei dati.

    • Ci sarebbe un modo per utilizzare questo metodo e che le notifiche push essere considerata una notifica e non solo i dati delle firebase dashboard?
    • Utilizza la fcm console sarà sempre invia una notifica in oggetto
    • davvero utile risposta, come posso gestire i dati ricevuti quando un’app viene ucciso/chiuso?
  3. 3

    Non ho avuto questo problema.e risolto con l’uso di seguito codice:

    Attivare Firebase Notifiche:

    FirebaseInstanceId.getInstance().getToken();

    Disattivare Firebase Notifiche:
    deleteInstanceId() è una chiamata di blocco. Non può essere chiamato sul thread principale.

    FirebaseInstanceId.getInstance().deleteInstanceId();
    • dove mothod è impostato FirebaseInstanceId.getInstance().deleteInstanceId(); ?
    • Io uso AsyncTask,e mettere FirebaseInstanceId.getInstance().deleteInstanceId(); in doInBackground
  4. 2

    È in grado di gestire tutti i push eventi da tutti i servizi di differenza (con Firebase). Prima di creare YouUniversalFCM extends WakefulBroadcastReceiver

    Per esempio:

    public class YourUniversalFCM extends WakefulBroadcastReceiver {
    
        private static final String ACTION_REGISTRATION
            = "com.google.android.c2dm.intent.REGISTRATION";
        private static final String ACTION_RECEIVE
            = "com.google.android.c2dm.intent.RECEIVE";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            for (String key : intent.getExtras().keySet()) {
                Log.d(
                        "TAG",
                        "{UniversalFCM}->onReceive: key->"
                                + key + ", value->" + intent.getExtras().get(key)
                );
            }
            switch (action) {
                case ACTION_REGISTRATION:
                    //TODO: 2016-08-06
                    break;
    
                case ACTION_RECEIVE:
                    //TODO: 2016-08-06
                    break;
    
                default:
            }
    
            abortBroadcast();
        }
    }

    Avanti in AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    
    <application
        ...>
    
        ...
    
        <receiver
            android:name=".fcm.receivers.UniversalFCM"
            android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
                <category android:name="YOUR_PACKAGE"/>
            </intent-filter>
        </receiver>
    
    </application>

    Sostituire YOUR_PACKAGE dal pacchetto dell’applicazione. Questo è tutto.
    Se si desidera iscriversi per un altro servizio di push, è necessario aggiungere YourTokenService

    public class YourTokenService extends FirebaseInstanceIdService {
        @Override
        public void onTokenRefresh() {
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            L.d(TokenService.class, "onTokenRefresh() Refreshed token: " + refreshedToken);
            //TODO: 2016-08-06
            super.onTokenRefresh();
        }
    }

    E dichiarato in AndroidManifest.xml

    <service android:name="YourTokenService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    • WakefulBroadcastReceiver è diventato obsoleto. Si prega di evitare questo metodo e vedere Alvin Rusli risposta
  5. 2

    Incontro la stessa domanda. Io uso subscribeToTopic API per sottoscrivere la notifica.

    FirebaseMessaging.getInstance().subscribeToTopic("APP");

    E trovo le altre API unsubscribeFromTopic di iscrizione.

    FirebaseMessaging.getInstance().unsubscribeFromTopic("APP");

    Forse sarebbe utile APP per argomento di notifica. Non ricevere la notifica in primo piano e di sfondo.

Lascia un commento