2017-09-25 4 views
1

J'ai déplacé Firebase Cloud Messaging dans une bibliothèque, ce qui me permet de l'importer dans n'importe laquelle de mes applications et de fournir des messages push. Donc, j'ai créé une bibliothèque et j'ai tout transféré à ma bibliothèque vers from this example.Comment initialiser Firebase Cloud Messaging dans une bibliothèque inférieure?

Ensuite, je compile cette bibliothèque dans mon build.gradle et l'utilise comme désiré. Cela fonctionne jusqu'à présent quand j'instancier Firebase du niveau de l'application:

FirebaseMessaging.getInstance().subscribeToTopic(topic) 

Maintenant, je pensais déplacer ce bas dans ma bibliothèque:

fun initFirebaseMessaging(topic : String) : String 
{ 
    FirebaseMessaging.getInstance().subscribeToTopic(topic) 
    Timber.d("Push subscribeToTopic $topic") 
    val token = FirebaseInstanceId.getInstance().token!! 
    Timber.d("Push FirebaseinstanceId token $token") 
    sendRegistrationToServer(token) 
    return token 
} 

Depuis que je ne cédez pas le contexte de niveau d'application, Je reçois:

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.demo, PID: 8047 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demo/com.example.MainActivity}: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.demo. Make sure to call FirebaseApp.initializeApp(Context) first. 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
                    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
                    at android.os.Handler.dispatchMessage(Handler.java:105) 
                    at android.os.Looper.loop(Looper.java:164) 
                    at android.app.ActivityThread.main(ActivityThread.java:6541) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
                   Caused by: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process com.example.demo. Make sure to call FirebaseApp.initializeApp(Context) first. 
                    at com.google.firebase.FirebaseApp.getInstance(Unknown Source:58) 
                    at com.google.firebase.iid.FirebaseInstanceId.getInstance(Unknown Source:0) 
                    at com.google.firebase.messaging.FirebaseMessaging.getInstance(Unknown Source:9) 
                    at com.example.network.fcm.exampleFirebaseInstanceIdService$Companion.initFirebaseMessaging(exampleFirebaseInstanceIdService.kt:14) 
                    at com.example.MainActivity.onCreate(MainActivity.kt:168) 
                    at android.app.Activity.performCreate(Activity.java:6975) 
                    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
                    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)  
                    at android.app.ActivityThread.-wrap11(Unknown Source:0)  
                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)  
                    at android.os.Handler.dispatchMessage(Handler.java:105)  
                    at android.os.Looper.loop(Looper.java:164)  
                    at android.app.ActivityThread.main(ActivityThread.java:6541)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)  

ADDENDA: J'ai ajouté cette ligne à mon initialisation

fun initFirebaseMessaging(topic : String, context : context) : String 
{ 
    FirebaseApp.initializeApp(context) 
    FirebaseMessaging.getInstance().subscribeToTopic(topic) 
    Timber.d("Push subscribeToTopic $topic") 
    val token = FirebaseInstanceId.getInstance().token!! 
    Timber.d("Push FirebaseinstanceId token $token") 
    sendRegistrationToServer(token) 
    return token 
} 

conduit au même message d'erreur.

Répondre

1

Votre erreur

Make sure to call FirebaseApp.initializeApp(Context) first. 

Dans votre bibliothèque u besoin de créer la fonction comme

public static void Init(Context context) { 
FirebaseApp.initializeApp(context); 
} 

et l'appeler avant d'utiliser firebase. La meilleure façon de son ajouter à votre application exemple:

... extends Application /*** code **/ 
onCreate() { 
YourLibrary.Init(this); 
} 
+0

Voir dans le champ ci-dessus additif, il conduit à un même message d'erreur –

+0

do u fichier google-JSON? est-ce que vous avez dans build gradle classpath 'com.google.gms: google-services: 3.0.0'? – Peter

+0

Selon un commentaire ici: https://stackoverflow.com/questions/44229961/unknown-libraryvariants-property-gradle-will-not-sync Je suis en mesure d'utiliser plugin apply dans le niveau de l'application seulement, et pas dans la lib niveau? –