When running ./gradlew appDistributionUploadDevDebug I get an error saying it can't find the app.
The culprit is having applicationIdSuffix = ".dev" in my dev flavor. Removing it allows the apk to be uploaded, but then the artifact wouldn't be built properly. For the record I plan using only the dev flavor for internal distribution.
I get an error message saying I should enable app distribution, but since this is done on a "firebase project" level and it's done for the main flavor I can't do it again.
* What went wrong:
Execution failed for task ':app:appDistributionUploadDevDebug'.
> App Distribution could not find your app 1:xxxxxxxxx:android:0b3f<xxxxxxxxx>.
Make sure to onboard your app by pressing the "Get started" button on the App Distribution page in the Firebase console:
https://console.firebase.google.com/project/_/appdistribution
Documenting this as a bug, I'll add a reply since I found a workaround.
Edit: expanded name of gradlew task that was shortened. Though it works it may make for easier searching.
Workaround:
To fix open app/google-services.json and look for the mobilesdk_app_id key for the main package name.
For example in my case I noticed that 1:xxxxxxx:android:0b3f<xxxxxxx> was the value for the package with the .dev suffix, while the main package name (without .dev) shows under 1:xxxxxxx:android:7eb88<xxxxxxxx>
So heading to app/build.gradle, the firebaseAppDistribution block would look like this
firebaseAppDistribution {
appId = "1:xxxxxxxx:android:7eb88<xxxxxxxx>"
I still think this is a bug in firebase distribution. Sounds like the distribution gradle code is picking the right value, but the distribution server is not compatible.
BTW When the developer wants/needs to have 2 separate firebase projects you need to download 2 separate google-services.json files, and place them in the appropriate flavor folders. I also have a (2nd and 3rd) app that shares a project with that setup, but haven't added firebase distribution yet to check how it behaves.
For reference, my workaround worked while providing a serviceCredentialsFile. I also tried using the web token authentication but my results were inconclusive.
I thought that would be the case, but it turns out that you have to enable app distribution for each apk (buildType and/or flavor).
When selecting a project on the firebase console, the page automatically selects one of the apps and I was just enabling app distribution for that one.
There's a dropdown at the top where you can select another app (build/flavor), and you have to go to each one individually and enable app distribution.
I hope this helps someone else.
Related
I've been looking around the firebase console for half an hour for a button or menu allowing me to upload a new crash reporting mapping file. And cannot find a way. I've done it in the past, but cannot work out how now. Perhaps something has changed. It would be nice to have a big button on the screen saying "upload a new mapping file" wouldn't it? Can someone put me out of my misery?
Sorry if I'm late, but instead of creating an exception, like some suggest, here is a cleaner official way Firebase docs suggest. This guide will teach you how to automatically push the release apk mapping to Firebase Crash Reporter from your Android Studio IDE.
Go to the Get deobfuscated crash reports section. I'll cover some maybe-hard to follow points in that guide.
Add all gradle lines as suggested in the docs
Download the Private Key file as suggested
Copy this Private Key file to the root folder of your project
In your gradle.properties file, add this line FirebaseServiceAccountFilePath=../name-of-downloaded-file.json
In terminal, at the root of your project, run this line ./gradlew :app:firebaseUploadReleaseProguardMapping.
This will build the release apk and upload it's mappings to Firebase in one shot.
Just keep in mind that if you're using a version control or open sourcing your project, keep your Private Key file ignored or kept safe from other team members.
Note that, you can also assign a shortcut to run this arcane gradle command by clicking on Gradle tab on right-hand-side. Then (root) -> Tasks -> Other -> firebaseUploadReleaseProguardMapping (right-click on this). Then add your favourite shortcut :)
MANUALLY UPLOAD "mapping.txt" WITHOUT GRADLE TASK
Mapping file is Application Based
Mapping files are Application Version Based
So you have to upload mapping.txt file to firebase console after each version release.
After first crash or error is reported for a given app version, you can manually upload mapping.txt file.
You can find the file to upload at a file path that is similar to the following, but specific to your app:
<project root>/<module name>/build/outputs/mapping/<build type>/<appname>-proguard-mapping.txt
Example:
app/build/outputs/mapping/debug/app-proguard-mapping.txt
At Firebase Console,
Go to,
Firebase Console > Select Your App > Select "Crash Reporting" From Left Menu > Navigate To "MAPPING FILES" Tab > Press "UPLOAD" Against Your App Version. > DONE
See screenshot,
READ HERE
Official instruction for manual mapping file upload to firebase console
Try to open newly published app in your phone. It might send the signal to the firebase about new version.
On the screen that you're showing, the dates are showing when you last uploaded a mappings file for that app version. Now, hover the mouse over one of those rows. Notice the three dots menu icon on the right. Click that. Delete the mapping file. Then, then you should have the option to upload a new one.
There will also be a way to upload mappings files using a Gradle plugin coming in the future.
Firebase crash is a cool tool but as fair as I know there is not any way to programmatically upload Proguard mapping file via API after a build.
Recently, "automate file uploads" options appairs but no info are actually aviable in the learn more link.
Does anyone know something more?
On 15th December the Crash Reporting plugin was released by google: it will generate a gradle task that performs the upload of ProGuard mappings file to Firebase Crash.
Here the steps to use it:
https://firebase.google.com/docs/crash/android#uploading_proguard_mapping_files_with_gradle
Unfortunately, this looks to be an IOS only feature right now: https://firebase.google.com/docs/crash/ios#upload_symbol_files.
Upload symbol files
In order to view human friendly crash reports, you need to upload symbol files after each build. This can be done automatically by adding a run script to Xcode.
Download a service account key to authenticate your uploads. From the Firebase console, select your project and then click Generate New Private Key.
In Xcode, click on your application target, select Build Phases, and click + to add a phase.
Select Run Script and add the following content, setting appropriate values for your service account path and GOOGLE_APP_ID:
Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:my:app:id
Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
"${PODS_ROOT}"/FirebaseCrash/upload-sym "/Path/To/ServiceAccount.json"
Note: If your service account key changes, reset your OAuth credentials by running this command:
rm $HOME/Library/Preferences/com.google.SymbolUpload*
I had GCM implemented and I am trying to import GCM to FCM now. I dont want to use google-services.json because I want to use different google projects for different environments(Dev, Stag, Prod).
I tried to initialize the app via this code below
FirebaseOptions.Builder options=new FirebaseOptions.Builder();
options.setGcmSenderId("<<project id>>");
options.setApplicationId("<<Project name>>");
FirebaseApp firebaseApp = FirebaseApp.initializeApp(getApplicationContext(),options.build(),"MyTestFCM");
String refreshedToken= FirebaseInstanceId.getInstance(firebaseApp).getToken();
I keep getting exception on Firebase App initialization
Caused by: java.lang.IllegalStateException: FirebaseApp with name [DEFAULT] doesn't exist. Available app names: MyTestFCM
If I remove the app name then i dont get a token back, then when I re-run the application I get a token. I have tried to execute the above piece of code from Mainactivity and Application class. In both places I get the same error.
So my question is how do I initialize Firebase application without using google-services.json
Thanks,
P
Firebase SDK requires to have a "default" project configured via google-services.json
Once you have that you can register FCM sdk with other sender-id using the FirebaseInstanceId.getInstance(context).getToken(...)
But please note that the most recent FCM features (auto-retry of the registration, topic subscriptions) only work with the default project.
So turns out that you need to use google-services.json for FCM, and to handle multiple build variants situation,
Generate respective google-services.json from the firebase console for the different build variants.
Download the google-services.json
In your project create folders for the variants, for example if you want release build, create a folder with name "release" and place the google-services.json in it.
When the app builds, depending upon the build variant it looks for google-services.json in the respective folder and picks up the project details from it.
More details can be found on this thread
google services issues 54
Thanks Arthur Thompson
have you checked to make sure to set your FIREBASE_URL to the right string? Also did you make sure to have the appropriate app setup config?
Last time this happened, I needed to set up my Android App Configs.
https://support.google.com/firebase/answer/7015592
Afterwards, you can follow this setup.
https://firebase.google.com/docs/cloud-messaging/android/client
Please do double check, you added
apply plugin: 'com.google.gms.google-services'
at the bottom of app's gradle file and then clean and rebuild the project
I am using THIS PAGE to generate configuration file for GCM APIs.
I accidentally added a duplicate staging flavored package name: stag apart from staging. I wonder if there is any way to remove it? I cannot find the package list in Google develop console anywhere.
If you go to the Console -> Manage all projects there should probably be a project that relates to your incorrectly entered package. If you delete the project, the package will no longer be visible in the list (be sure not to delete something thats actually needed :P).
I am trying to setup an Android app, using Android Studio with 2 different flavours. Each flavour changes packageName and applicationId - since I want 2 separate APK's submitted as 2 different products to Google Play.
I also try to setup separate apps in Crashlytics, one for each flavour. Although the first one was created without any problem, when I switch flavour, Crashlytics plugin for Android Studio still thinks that my project is already setup. So currently I cannot setup my Crashlytics for second flavour properly.
Thanks in advance for any suggestions.
As suggested by m4ch3t3 this workaround worked perfectly:
I created an empty project with package name matching the other
flavour. Using this project I created new app in Crashlytics. Then I
compiled both flavours of my real project and caused fake crashes in
them. Crashes were reported into matching Crashlytics apps
You can define different package name by definining applicationId in your app build.gradle as follow:
productFlavors {
dev {
applicationId "dev.myapp.app"
}
prod {
applicationId "prod.myapp.app"
}
}
Using the Crashlytics plugin for Android Studio will be a PITA in your case.
What you really need is only the API key and secret - shared among the same organisation - so if you already have one app correctly deployed on Crashlytics you can access those data from your organisation profile.
Just log out from the android studio plugin (CTRL+L while the plugin popup is focused), and take a look at this answer that explain how to deal with multiple flavour and multiple keys.