匕首2麻烦@注入FirebaseMessagingService

我最近尝试将我正在从GCM的应用程序迁移到FCM 。 当我这样做的时候,我发现我之前使用Dagger 2 (2.0.2)在服务内部提供了我的Retrofit API和其他用户数据pipe理器的实例(没有问题),我不能再这样做FirebaseMessagingService

每当我尝试编译与我的Dagger 2 Component接口中列出的FirebaseMessagingService的子类,我会得到一个IllegalArgumentException 。 在深入了解一些代码之后, Dagger 2试图validation一个类名并发现第一个字母不是大写字母时,似乎抛出exception。 至less在我的最后, FirebaseMessagingServiceinheritance自一个简化/缩小的代码库,其直接超类是zzbpublic class FirebaseMessagingService extends com.google.firebase.iid.zzb )。

我最好的猜测是这是罪魁祸首。 如果这真的是问题,我不知道该怎么做,现在坚持GCM 。 任何人有任何想法或类似的经验呢?

编辑:我有机会问一个Firebase开发者有关这个问题: https : //www.reddit.com/r/androiddev/comments/4upj1o/beware_of_the_new_firebase/d5tdbk3 – 没有解决scheme。 我可能只是要避免直接注入,并巩固到一个静态的API提供者。

  • 当应用程序在前台运行时,在警报框中显示推送通知
  • 发送GCM消息(服务器端)往往失败 - 但远非如此
  • 如何将GCM消息一次发送到多个设备
  • Google云消息示例
  • 使用GCM将推送通知发送到多个Android设备
  • 某些时候在手机中没有收到推送通知GCM
  • 如何为GCM创buildAPI密钥?
  • 在深度空闲模式下没有收到GCM高优先级消息
  • 经过半天的奋斗,终于搬到了Dagger 2.7修正了这个问题。

     compile "com.google.dagger:dagger:2.7" apt "com.google.dagger:dagger-compiler:2.7" 

    我们遇到了同样的问题,Dagger对类大写的classname进行了一些愚蠢的validation,遇到了一个混淆了的类名,

     public class FirebaseService extends xxab { } 

    xxab只是随机的名字,proguard吐在混淆通行证,我可以记得确切的)

    我们做了一个愚蠢的解决方法,不够优雅,但工作:

     public class FirebaseServiceProvider { //not real provider, though public FirebaseServiceProvider(...params){ mInstance = ... } public FirebaseService getService(){ return mInstance; } } 

    @Module

     @Singleton @Provides public FirebaseServiceProvider providesFirebaseServiceProvider(){ return new FirebaseServiceProvider(.....); } 

    注射:

     @Inject FirebaseServiceProvider mFirebaseServiceProvider; 

    用法:

     mFirebaseServiceProvider.getService().doStuff();