Bonjour,

J'ai une application qui utilise les notifications Firebase. Elle doit pouvoir transmettre le numéro d'enregistrement à un serveur distant, et bien sûr recevoir les notifications en question.

J'ai fait le lien et l'import des fichiers de conf via l'assistant Firebase.

Au Manifest :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 <service
            android:name=".MyFirebaseMessagingService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
        </service>
        <service
            android:name=".CustomFirebaseInstanceIDService"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>
Pour la récupération du numéro :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class CustomFirebaseInstanceIDService extends FirebaseInstanceIdService {
    protected  URI uri;
    //Définition du serveur distant
    protected HttpClient clientWeb;
    protected HttpGet recupWeb;
    protected HttpResponse reponseWeb;
    //Identification
    protected String imei;

    @Override
    public void onTokenRefresh() {
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        //Récupération de l'IMEI
        TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        imei = telephonyManager.getDeviceId();

        clientWeb = new DefaultHttpClient() ;
        try {
            uri = new URI( [monServer]+ imei + ";chpsep;" + refreshedToken);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        recupWeb = new HttpGet( uri ) ;

        try
        {
            //Lecture des informations
            reponseWeb = clientWeb.execute( recupWeb ) ;
        }
        // Gestion des erreurs, affichage des messages concernant la connexion
        catch( Exception e )
        {
            Log.e("Connection distante", e.getMessage()) ;
        }
    }
}
Le problème c'est que je ne passe jamais dans ce code ! J'ai désinstallé, réinstallé l'appli, rien. J'ai vidé le cache et supprimé les fichiers, rien ! Impossible de récupérer ce fichu numéro, alors que toutes les docs que j'ai trouvées semblent dire que c'est correct comme ça.

Quand je push une notification à partir de la console Firebase, le poste ne la reçoit pas, ce qui semble confirmer que le poste ne s'inscrit pas du tout à la base...

Mais le plus étrange, c'est que j'ai testé cette même appli sur des postes en Android 4, et là, ils se sont inscrits, et j'ai récupéré les numéros ! Mais depuis Android 5, rien, totalement inerte...

Quelqu'un aurait une idée ? Une piste ? Une solution (on n'est pas loin de Noël, alors bon, pourquoi pas, j'ai été super sage, si, si !) ?

--------------------------------------------------------------------

En mode debug, j'obtiens ceci :

D/FirebaseInstanceId: background sync failed: SERVICE_NOT_AVAILABLE, retry in 10s

Ben oui, mais ça peut pas être le service côté Firebase, sinon ça fait 10 TRES longues secondes....

Côté smartphone, j'ai fait la mise à jour des Services Google Play, qui sont désormais en version 10... Mais toujours même réponse : D/FirebaseInstanceId: background sync failed: SERVICE_NOT_AVAILABLE, retry in 10s