2016-11-09 11 views
1

我有一個多個flavours和多個buildType的項目。Android的Firebase消息上傳不是射擊

我先說明我的項目結構,然後再繼續:

app 
    - src 
     - main 
     - flavour1 
     - flavour2 

以上就是我目前的項目結構。現在我要粘貼下面我build.gradle

productFlavors { 
    flavour1 { 
     applicationId "com.myproject.flavour1" 
     signingConfig signingConfigs.release 

    } 
    flavour2 { 
     applicationId "com.myproject.flavour2" 
     signingConfig signingConfigs.release 
    } 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debug { 
     applicationIdSuffix '.debug' 
     debuggable true 
    } 
    qa { 
     applicationIdSuffix '.qa' 
     debuggable true 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.google.firebase:firebase-messaging:9.0.0' 
    compile 'com.google.android.gms:play-services-analytics:9.0.0' 
} 

apply plugin: 'com.google.gms.google-services' 

現在我想要做到的是有一個特定的google-services.json每個構建變量,這樣我可以使用每個構建變量不同火力地堡雲端通訊項目。

事情是這樣的:

app 
    - src 
     - main 
     - flavour1 
      - debug 
      - google-services.json <-- connected to Debug FCM Project 
      - qa 
      - google-services.json <-- connected to QA FCM Project 
     - flavour2 
      - debug 
      - google-services.json <-- connected to Debug FCM Project 
      - qa 
      - google-services.json <-- connected to QA FCM Project 

這個方法我試過,而且它不工作。沒有上行消息正被髮送到服務器。我嘗試將google-services.json移動到根目錄並刪除所有其他json文件,然後我發現郵件正在發送。我認爲這得到了classpath 'com.google.gms:google-services:3.0.0'的支持,這是我包含在我的build.gradle文件中的東西。

如果我錯過了一個步驟,或者如果我不正確地做某件事,請賜教。

回答

0

72小時重新創建多個項目來模仿我的文件結構後,我能夠將它縮小到這個問題,我希望這可能是使用的人誰遇到這樣的:

FirebaseApp.initializeApp(this, FirebaseOptions.fromResource(this)); 

我將上面的代碼行放在我的Application類中,因爲我的項目總是要求我這樣做。大多數示例應用程序不需要我手動初始化FirebaseApp,因爲它應該是自動完成的,但出於某種奇怪的原因,我的項目總是要求我這樣做。

做一些挖後,我發現在我的控制檯Log指出: '啊哈!'

D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.

這是我的時刻。然後在多一點挖掘之後,我發現問題是我的AndroidManifest.xml中的chillin like a villain

我有以下標籤:

<application 
    android:name=".Application" 
    android:allowBackup="false" 
    tools:node="replace" 
    android:icon="@mipmap/ic_launcher_my_app" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> ... 

如果你發現,我有一個標籤tools:node="replace"。原來,這條線,它不會初始化我的FirebaseApp。使用它實際上取代了較低優先級的聲明。

我最終取代了這條線,瞧! FirebaseApp已成功鏈接並且上游消息開始工作!

我也沒有爲每種風格構建類型創建一個google-services.json文件。我爲每個buildType創建了一個文件夾,並將其存儲在那裏。

是這樣的:

app 
- src 
    - debug 
     - google-services.json <-- connected to Debug FCM Project 
    - qa 
     - google-services.json <-- connected to QA FCM Project 
    - release 
     - google-services.json <-- connected to Release FCM Project 
    - flavour1 
    - flavour2 

每個每個buildType包內的google-services.json配置文件已全部productFlavours裏面所以每當我運行一個特定的構建變種,它加載了正確的配置文件。

相關問題