È possibile gestire tutti gli eventi push da tutti i servizi di differenza (con Firebase). In primo luogo creare YouUniversalFCM extends WakefulBroadcastReceiver
Ad 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 nella 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 della vostra applicazione. È tutto. Se si desidera iscriversi per un altro servizio 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>
In realtà, docs Firebase consiglia di utilizzare i dati spingere invece di notifiche, se si vuole avere il controllo completo su come viene gestita: https://firebase.google.com/docs/cloud-messaging/concept-options #notifications_and_data_messages - quote: "Utilizza le notifiche quando vuoi che l'FCM gestisca la visualizzazione di una notifica per conto della tua app client. Utilizza i messaggi di dati quando vuoi che la tua app gestisca la visualizzazione o elabori i messaggi sulla tua app client Android ..." – racs
Grazie tu. Usando il push dei dati (attraverso una richiesta POST) sono in grado di gestire la notifica anche se l'app è in background. Ora, come posso inviare dati a tutti i dispositivi senza specificare il token di ogni singolo dispositivo nel mio file JSON? Tramite la console di Firebase è possibile specificare "User Segment", ma se non si specifica l'elemento "a" nel file JSON, ricevo l'errore 400. – martinodecarlo
Non sono un esperto in questo argomento, ma per quanto riguarda Posso dire quando fai il push dei dati quindi in pratica salti le caratteristiche di Firebase tutte insieme. Quindi non è disponibile alcuna trasmissione agli utenti di argomenti o analisi. In questo caso, FB funge da relay per GCM e non interagisce con i dati inviati. – racs