
How to Replace App Center with Firebase Using Azure DevOps Pipelines
Why Replace App Center with Firebase?
With Microsoft retiring App Center soon on March 31, 2025, developers need a reliable alternative for mobile app distribution and CI/CD. Firebase App Distribution provides a seamless solution, allowing you to efficiently distribute builds, gather feedback, and integrate with Azure DevOps Pipelines for automation.
Top 10 Benefits of Using Firebase Over App Center
✅Free Plan
✅Simplified App Distribution
✅Supports both iOS & Android apps
✅Automated app distribution for testers
✅Email Notifications
✅Version Management
✅Seamless integration with Azure DevOps
✅Security & Access Control
✅Better analytics and crash reporting
✅Faster Feedback Loop
Prerequisites for Firebase App Distribution
Before setting up Azure DevOps Pipelines, ensure you have:
✔️ Firebase Project (Create one at Firebase Console)
✔️ Firebase CLI installed
✔️ Azure DevOps Account with proper permissions
✔️ Source Code Repository (Azure Repos, GitHub, or Bitbucket)
Step 1: Set Up Firebase App Distribution
1. Add Your App to Firebase
- Log in to Firebase Console and create a new project.
- Click “Add App”, select iOS or Android, and follow the setup instructions.
2. Download Configuration Files
- For Android, download
google-services.json
. - For iOS, download
GoogleService-Info.plist
. - Place these files in the root directory of your app.
3. Add Testers to Firebase (Optional)
- In Firebase App Distribution, go to “Testers & Groups”.
- Add testers or create a tester group for easy distribution.
4. Applicaiton ID
Get the App ID for both android and iOS apps from the project setting and store it in a pipeline variable as FIREBASE_IOS_APP_ID, FIREBASE_AOS_APP_ID. It will be used later in the firebase deployment from the azure pipeline.
Step 2: Configure Azure DevOps Pipeline for Firebase Distribution
1. Generate a Firebase Service Account Key
Authentication on Firebase can be performed using the Firebase CI Token. Since the Firebase token has been deprecated and will be removed in the next major Firebase release, we will use the GCP login for this integration. To download the GCP json service key, follow these steps:
Open project settings -> Go to service accounts tab -> Generate new private key as shown below.
2. Store Firebase Credentials in Azure DevOps
- Navigate to Azure DevOps > Pipelines > Library.
- Create a Secure Files (e.g.,
FirebaseCredentials.json
).

3. Add the Firebase dependency to your project
Go to your package.json file and add the “firebase-tools”: “^13.30.0” under dependencies.
4. Create Azure DevOps Pipeline (YAML Configuration)
Create a azure-pipelines.yml
file in your repository:
trigger:
branches:
include:
- main
variables:
#Environment
- name: DEVOPS_ENVIRONMENT
value: 'DemoApp Mobile'
#Firebase
- name: FIREBASE_IOS_APP_ID
value: '1:xxxxxxxxxxxxxx:ios:a18fxxxxxxxxxxxx4bf974a'
- name: FIREBASE_AOS_APP_ID
value: '1:xxxxxxxxxxxxxx:android:e99xxxxxxxxxxxxxxxf974a'
jobs:
######################################################## AOS
- deployment: job_deploy_android
displayName: 'AOS Deploy'
pool:
vmImage: 'ubuntu-latest'
environment: $(DEVOPS_ENVIRONMENT)
strategy:
runOnce:
deploy:
steps:
- checkout: self
persistCredentials: true
clean: true
- task: NodeTool@0
displayName: 'Using Node.js 18.x'
inputs:
versionSpec: '18.x'
- task: Npm@1
displayName: 'Install dependencies'
inputs:
command: 'ci'
# Build Android bundle with Gradle
- task: Gradle@3
displayName: 'Build APK'
inputs:
gradleWrapperFile: 'android/gradlew'
cwd: 'android'
tasks: 'assembleRelease'
publishJUnitResults: false
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.17'
gradleOptions: '-Xmx4608m'
sonarQubeRunAnalysis: false
- task: DownloadSecureFile@1
name: FirebaseCredentials
displayName: 'Download Firebase SA Private Key'
inputs:
secureFile: 'FirebaseCredentials.json'
# Distribute APK to Firebase
- task: Bash@3
displayName: 'Distribute APK Package to Firebase'
inputs:
targetType: 'inline'
script: |
export GOOGLE_APPLICATION_CREDENTIALS=$(FirebaseCredentials.secureFilePath)
./node_modules/.bin/firebase appdistribution:distribute "$(Build.SourcesDirectory)/android/app/build/outputs/apk/release/app-release.apk" --app $(FIREBASE_AOS_APP_ID) --release-notes " Branch: $(Build.SourceBranchName) \n Build version: $(Build.BuildNumber)"
######################################################## IOS
- deployment: job_deploy_ios
condition : false
displayName: 'iOS Deploy'
pool:
vmImage: 'macos-13'
environment: $(DEVOPS_ENVIRONMENT)
strategy:
runOnce:
deploy:
steps:
- checkout: self
persistCredentials: true
clean: true
- task: NodeTool@0
displayName: 'Using Node.js 18.x'
inputs:
versionSpec: '18.x'
- task: Npm@1
displayName: 'Install dependencies'
inputs:
command: 'ci'
- task: CocoaPods@0
displayName: 'Install CocoaPods'
inputs:
workingDirectory: 'ios'
# Build and archive iOS Application under IPA format bundle
- task: Xcode@5
displayName: 'Build IPA'
inputs:
actions: 'build'
xcodeVersion: 'specifyPath'
xcodeDeveloperDir: '/Applications/Xcode_15.2.app'
configuration: 'Release'
sdk: 'iphoneos'
xcWorkspacePath: 'ios/$(IOS_PROJECT_NAME).xcworkspace'
scheme: $(IOS_PROJECT_NAME)
packageApp: true
exportPath: 'output'
- task: CopyFiles@2
displayName: 'Copy IPA Bundle'
inputs:
contents: 'output/$(IOS_PROJECT_NAME).ipa'
targetFolder: '$(Build.ArtifactStagingDirectory)'
- publish: '$(Build.ArtifactStagingDirectory)/output'
displayName: 'Publish IPA Bundle'
artifact: drop
- task: DownloadSecureFile@1
name: FirebaseCredentials
displayName: 'Download Firebase SA Private Key'
inputs:
secureFile: 'FirebaseCredentials.json'
# Distribute Bundle to Firebase
- task: Bash@3
displayName: 'Upload IPA Bundle to Firebase'
inputs:
targetType: 'inline'
script: |
export GOOGLE_APPLICATION_CREDENTIALS=$(FirebaseCredentials.secureFilePath)
./node_modules/.bin/firebase appdistribution:distribute "$(Build.SourcesDirectory)/output/$(IOS_PROJECT_NAME).ipa" --app $(FIREBASE_IOS_APP_ID) --release-notes " Branch: $(Build.SourceBranchName) \n Build version: $(Build.BuildNumber)"
Step 3: Run the Pipeline & Distribute Your App
- Push the
azure-pipelines.yml
file to your repository. - In Azure DevOps, go to Pipelines > New Pipeline.
- Select your repository and configure it to use YAML.
- Click Run to trigger the pipeline.
🎉 Your mobile app is now built and distributed using Firebase via Azure DevOps!
Conclusion: Why Firebase is the Best Alternative to App Center
Migrating from App Center to Firebase ensures your mobile app continues to be efficiently distributed with CI/CD automation via Azure DevOps Pipelines. With Firebase App Distribution, you get:
✅ Continuous Deployment for testers
✅ Better app insights & crash analytics
✅ Scalability and Google Cloud integration
💡 Start your migration today and streamline your mobile app distribution with Firebase!