[{"data":1,"prerenderedAt":1820},["ShallowReactive",2],{"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F":3,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F-related":621,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F-resources":1803},{"id":4,"title":5,"author":6,"body":10,"category":541,"createdAt":542,"description":543,"disclosure":544,"extension":545,"faq":546,"howTo":544,"lastVerified":544,"location":565,"meta":566,"navigation":572,"ogImage":544,"path":573,"primaryKeyword":574,"readingTime":575,"related":576,"seo":580,"sources":581,"stem":611,"tags":612,"takeaways":613,"updatedAt":542,"url":619,"__hash__":620},"blog\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026.md","Google Sign-In for Android Is Deprecated: Moving to Credential Manager",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":529},"minimark",[13,38,41,47,52,150,153,158,161,197,201,210,329,333,343,410,413,417,508,512],[14,15,16,20,21,25,26,29,30,33,34,37],"p",{},[17,18,19],"strong",{},"Google Sign-In for Android is deprecated, and Sign in with Google now runs through Credential Manager."," If your app still uses ",[22,23,24],"code",{},"GoogleSignInClient"," and ",[22,27,28],{},"GoogleSignInOptions"," from ",[22,31,32],{},"play-services-auth",", or One Tap, move it to Credential Manager before Google removes the old code from the SDK. In a Flutter app the move is an upgrade to ",[22,35,36],{},"google_sign_in"," 7, which is a breaking release. Much of the work is in the code, and some of the bugs afterwards are in the setup.",[14,39,40],{},"If you landed here from an old link to Google's Android sign-in guide, that address now redirects to the Credential Manager overview. The dates and behavior below come from Android Developers, the Android Developers Blog and the Flutter plugin pages, as listed in the sources. I checked each page on October 18, 2026.",[14,42,43,46],{},[17,44,45],{},"Disclosure:"," App369 is my studio. I build and fix Flutter and Firebase apps, and the last section mentions what I sell. Google doesn't pay me for anything on this page.",[48,49,51],"h2",{"id":50},"what-changed-and-when","What changed, and when",[53,54,55,71],"table",{},[56,57,58],"thead",{},[59,60,61,65,68],"tr",{},[62,63,64],"th",{},"When",[62,66,67],{},"What happened",[62,69,70],{},"Source",[72,73,74,92,105,118,135],"tbody",{},[59,75,76,80,83],{},[77,78,79],"td",{},"September 11, 2024",[77,81,82],{},"Google announces that Credential Manager replaces its legacy Android sign-in APIs, and publishes a removal timeline",[77,84,85],{},[86,87,91],"a",{"href":88,"rel":89},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2024\u002F09\u002Fstreamlining-android-authentication-credential-manager-replaces-legacy-apis.html",[90],"nofollow","Android Developers Blog",[59,93,94,97,100],{},[77,95,96],{},"Q1 2025",[77,98,99],{},"Smart Lock for Passwords: listed as fully shut down",[77,101,102],{},[86,103,91],{"href":88,"rel":104},[90],[59,106,107,110,113],{},[77,108,109],{},"H1 2025",[77,111,112],{},"Credential Saving API and the Sign in with Google button API: listed for removal",[77,114,115],{},[86,116,91],{"href":88,"rel":117},[90],[59,119,120,125,130],{},[77,121,122],{},[17,123,124],{},"H2 2025",[77,126,127],{},[17,128,129],{},"One Tap and Google Sign-In for Android: listed for removal",[77,131,132],{},[86,133,91],{"href":88,"rel":134},[90],[59,136,137,140,143],{},[77,138,139],{},"Now",[77,141,142],{},"Google's migration page says legacy Google Sign-In is deprecated and will be removed from the Play services Auth SDK in a future release",[77,144,145],{},[86,146,149],{"href":147,"rel":148},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Flegacy-gsi-migration",[90],"Android Developers",[14,151,152],{},"The two sources don't give the same date. The 2024 post gave half-year targets; the migration page, last updated March 6, 2026, gives none. What both say is the same: the old APIs are on their way out, and new work belongs on Credential Manager.",[154,155,157],"h3",{"id":156},"what-the-old-addresses-do-today","What the old addresses do today",[14,159,160],{},"Checked on October 18, 2026:",[162,163,164,175,181,191],"ul",{},[165,166,167,170,171,174],"li",{},[17,168,169],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fstart-integrating",", the old setup guide, ",[17,172,173],{},"redirects"," to the Android Credential Manager overview.",[165,176,177,180],{},[17,178,179],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fsign-in"," redirects there too.",[165,182,183,186,187,190],{},[17,184,185],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Flegacy-gsi-migration"," returned ",[17,188,189],{},"404",". The live migration page is on developer.android.com, linked in the sources.",[165,192,193,196],{},[17,194,195],{},"developers.google.com\u002Fidentity\u002Fone-tap\u002Fandroid\u002Foverview"," redirects to a page that says One Tap for Android is deprecated.",[48,198,200],{"id":199},"moving-a-native-android-app-to-credential-manager","Moving a native Android app to Credential Manager",[14,202,203,204,209],{},"The steps follow Google's ",[86,205,208],{"href":206,"rel":207},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg-implementation",[90],"Sign in with Google implementation guide",":",[211,212,213,236,246,268,289,295,305,318],"ol",{},[165,214,215,218,219,222,223,25,226,229,230,235],{},[17,216,217],{},"Add the dependencies."," Add ",[22,220,221],{},"androidx.credentials:credentials",", ",[22,224,225],{},"androidx.credentials:credentials-play-services-auth",[22,227,228],{},"com.google.android.libraries.identity.googleid:googleid",". Check the ",[86,231,234],{"href":232,"rel":233},"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fandroidx\u002Freleases\u002Fcredentials",[90],"androidx.credentials release page"," for the current stable version: on October 18, 2026 the newest stable release listed was 1.6.0, while Google's sample used a 1.7.0 alpha.",[165,237,238,241,242,245],{},[17,239,240],{},"Use your web client ID."," Google's guide passes the ",[17,243,244],{},"Web"," client ID you set up for OAuth in your Google Cloud project as the server client ID, even in an Android app. The project also has to know your Android app: the Flutter plugin's docs list a wrong package name or a missing signing SHA as common causes of failed sign-in.",[165,247,248,251,252,255,256,259,260,263,264,267],{},[17,249,250],{},"Build the request."," For the bottom-sheet flow, use ",[22,253,254],{},"GetGoogleIdOption"," with your web client ID. Google's guide first sets ",[22,257,258],{},"setFilterByAuthorizedAccounts(true)"," to offer accounts that already signed in, with ",[22,261,262],{},"setAutoSelectEnabled(true)"," for returning users. For a \"Sign in with Google\" button, use ",[22,265,266],{},"GetSignInWithGoogleOption",".",[165,269,270,273,274,277,278,281,282,285,286,267],{},[17,271,272],{},"Call Credential Manager."," Create it with ",[22,275,276],{},"CredentialManager.create(context)"," and call ",[22,279,280],{},"getCredential"," with the request. When the result is a ",[22,283,284],{},"GoogleIdTokenCredential",", read it with ",[22,287,288],{},"GoogleIdTokenCredential.createFrom(credential.data)",[165,290,291,294],{},[17,292,293],{},"Verify the ID token on your server."," Send the ID token to your backend and verify it there. If you use Firebase Authentication, use the Google ID token with Firebase Auth.",[165,296,297,300,301,304],{},[17,298,299],{},"Move scopes to AuthorizationClient."," Google says sign-in and authorization are separate actions now. If your app reads Drive, Calendar or another Google API, request those scopes with the ",[22,302,303],{},"AuthorizationClient"," API when the user needs that feature, not at sign-in.",[165,306,307,310,311,314,315,267],{},[17,308,309],{},"Replace silent sign-in."," Google's migration page says to use a request with ",[22,312,313],{},"filterByAuthorizedAccounts"," set to true and auto-select on, in place of ",[22,316,317],{},"silentSignIn",[165,319,320,323,324,222,326,328],{},[17,321,322],{},"Remove the old code."," Once the new path works, remove ",[22,325,24],{},[22,327,28],{}," and any One Tap code, so an old error can't be mistaken for a new one.",[48,330,332],{"id":331},"moving-a-flutter-app-to-google_sign_in-7","Moving a Flutter app to google_sign_in 7",[14,334,335,336,339,340,342],{},"On Android, ",[22,337,338],{},"google_sign_in_android"," 7.0.0 switched to Credential Manager. Its changelog says it removed the deprecated Google Sign In for Android SDK. ",[22,341,36],{}," 7.0.0 is a breaking release, and its changelog lists the main changes:",[162,344,345,361,375,392],{},[165,346,347,353,354,357,358,267],{},[17,348,349,352],{},[22,350,351],{},"GoogleSignIn"," is a singleton."," Use ",[22,355,356],{},"GoogleSignIn.instance"," instead of creating your own ",[22,359,360],{},"GoogleSignIn(...)",[165,362,363,366,367,370,371,374],{},[17,364,365],{},"Initialize first."," Call and await ",[22,368,369],{},"initialize",", passing ",[22,372,373],{},"serverClientId"," where needed, before any other method.",[165,376,377,383,384,387,388,391],{},[17,378,379,380,267],{},"Sign-in is ",[22,381,382],{},"authenticate()"," Check ",[22,385,386],{},"supportsAuthenticate()"," first, because not every platform supports it. ",[22,389,390],{},"attemptLightweightAuthentication()"," covers returning users.",[165,393,394,397,398,401,402,405,406,409],{},[17,395,396],{},"Authentication and authorization are separate."," Access tokens and server auth codes come from separate calls through the account's ",[22,399,400],{},"authorizationClient",", with ",[22,403,404],{},"authorizationForScopes"," to check and ",[22,407,408],{},"authorizeScopes"," to ask, from a user interaction.",[14,411,412],{},"Plan for the upgrade to touch every place your app signs in, reads the current user or asks for scopes. It isn't a version bump you can make in one line.",[48,414,416],{"id":415},"when-sign-in-breaks-after-the-move","When sign-in breaks after the move",[53,418,419,432],{},[56,420,421],{},[59,422,423,426,429],{},[62,424,425],{},"What you see",[62,427,428],{},"What it usually means",[62,430,431],{},"What to check",[72,433,434,458,469,480,494],{},[59,435,436,439,442],{},[77,437,438],{},"\"serverClientId must be provided on Android\"",[77,440,441],{},"The plugin can't find your web OAuth client",[77,443,444,447,448,451,452,455,456],{},[22,445,446],{},"google-services.json"," needs an ",[22,449,450],{},"oauth_client"," entry with ",[22,453,454],{},"client_type: 3",". If it's missing, add a web app to the project and download the file again, or pass the web client ID to ",[22,457,369],{},[59,459,460,463,466],{},[77,461,462],{},"Sign-in reports \"canceled\" when the user didn't cancel",[77,464,465],{},"Sometimes a configuration error",[77,467,468],{},"The plugin's docs say some configuration errors come back from Credential Manager as \"canceled\", and the plugin can't tell them from a real cancel. Check the client IDs, package name and SHA fingerprints",[59,470,471,474,477],{},[77,472,473],{},"Works in debug, fails in release or from Play",[77,475,476],{},"The release signing key's SHA isn't registered",[77,478,479],{},"Register the signing SHA for each build configuration that fails, including the Play App Signing key shown in Play Console if you use it",[59,481,482,485,488],{},[77,483,484],{},"Sign-in works, but API calls fail with no token",[77,486,487],{},"Authentication and authorization are separate steps now",[77,489,490,491,493],{},"Request them with AuthorizationClient (",[22,492,408],{}," in Flutter)",[59,495,496,499,502],{},[77,497,498],{},"Package name mismatch",[77,500,501],{},"The Android client in Google Cloud has a different package name",[77,503,504,505],{},"Match the package name in Google Cloud or Firebase to ",[22,506,507],{},"applicationId",[48,509,511],{"id":510},"need-a-hand","Need a hand?",[14,513,514,515,519,520,524,525,267],{},"If sign-in still fails after the move, or it works on your phone but not for your users, the ",[86,516,518],{"href":517},"\u002Ffixed-price\u002Fflutter-firebase-bug-fix\u002F","App Fix Ticket"," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days. For a related Android change, see ",[86,521,523],{"href":522},"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","SafetyNet is gone: moving to Play Integrity and App Check",", or ",[86,526,528],{"href":527},"\u002Fcontact\u002F","send me a short description",{"title":530,"searchDepth":531,"depth":531,"links":532},"",2,[533,537,538,539,540],{"id":50,"depth":531,"text":51,"children":534},[535],{"id":156,"depth":536,"text":157},3,{"id":199,"depth":531,"text":200},{"id":331,"depth":531,"text":332},{"id":415,"depth":531,"text":416},{"id":510,"depth":531,"text":511},"AI & Technology","2026-10-18T11:00:00.000Z","Google deprecated Google Sign-In for Android, One Tap and Smart Lock for Passwords, and moved Sign in with Google into Credential Manager. What changed and when, how to migrate a native Android app, and how to move a Flutter app to google_sign_in 7, from Google's docs checked October 18, 2026.",null,"md",[547,550,553,556,559,562],{"question":548,"answer":549},"Is Google Sign-In for Android deprecated?","Yes. Google's migration page says legacy Google Sign-In for Android is deprecated and will be removed from the Google Play services Auth SDK (play-services-auth). Google recommends Sign in with Google through Credential Manager instead.",{"question":551,"answer":552},"When will GoogleSignInClient stop working?","Google's September 2024 timeline put the removal of Google Sign-In for Android in the second half of 2025. Its current migration page, last updated March 6, 2026, says the API will be removed in a future release, without a date. Google says removal comes in a future release, so migrate now.",{"question":554,"answer":555},"What replaced Google One Tap and Smart Lock on Android?","Credential Manager. Google's One Tap page now says One Tap for Android is deprecated and to migrate to Credential Manager, and the Smart Lock for Passwords page says the same.",{"question":557,"answer":558},"How do I get an access token for Google APIs after the migration?","Request them in a separate step from sign-in. Credential Manager returns an ID token that proves who the user is. To call Google APIs such as Drive, request the scopes with the AuthorizationClient API, which Google says apps should keep using for authorization.",{"question":560,"answer":561},"Why does Flutter say \"serverClientId must be provided on Android\"?","The google_sign_in Android plugin needs your web OAuth client ID. The plugin's documentation says google-services.json should contain a web OAuth client (an oauth_client entry with client_type 3). If it doesn't, add a web app to the project and download the file again, or pass the web client ID as serverClientId when you call initialize.",{"question":563,"answer":564},"Why does Google sign-in work in debug but not in release?","A common cause is that the release build's signing SHA isn't registered in your Firebase or Google Cloud project. The plugin's documentation lists a missing or wrong SHA as a common cause of sign-in working in one build configuration but not another.","Boynton Beach, FL",{"readingTimeStats":567},{"text":568,"minutes":569,"time":570,"words":571},"5 min read",5.005,300300,1001,true,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated","8 min",[577,578,579],"safetynet-shut-down-play-integrity-app-check-2026","firebase-deprecations-shutdown-dates-2026","how-to-debug-a-flutter-firebase-bug-2026",{"title":5,"description":543},[582,584,586,589,591,594,597,599,602,605,608],{"title":583,"url":88},"Android Developers Blog, \"Streamlining Android authentication: Credential Manager replaces legacy APIs\" (September 11, 2024)",{"title":585,"url":147},"Android Developers, about the migration from legacy Google Sign-In",{"title":587,"url":588},"Android Developers, about Sign in with Google","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg",{"title":590,"url":206},"Android Developers, implement Sign in with Google",{"title":592,"url":593},"Android Developers, about Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fcredential-manager",{"title":595,"url":596},"Android Developers, One Tap for Android (deprecated)","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Flegacy\u002Fone-tap\u002F",{"title":598,"url":232},"Android Developers, androidx.credentials releases",{"title":600,"url":601},"Firebase, authenticate with Google on Android","https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Fgoogle-signin",{"title":603,"url":604},"pub.dev, google_sign_in_android (Android setup and troubleshooting)","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android",{"title":606,"url":607},"pub.dev, google_sign_in changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in\u002Fchangelog",{"title":609,"url":610},"pub.dev, google_sign_in_android changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android\u002Fchangelog","blog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated, googlesigninclient deprecated, credential manager migration, sign in with google android, one tap android deprecated, smart lock for passwords deprecated, play-services-auth migration, google_sign_in 7 migration, flutter google sign in android, serverClientId must be provided on Android",[614,615,616,617,618],"Google deprecated the legacy Google Sign-In for Android API and says it will be removed from the Google Play services Auth SDK. Sign in with Google now runs through Credential Manager.","Google's September 11, 2024 timeline listed Smart Lock for Passwords as shut down in Q1 2025, and One Tap and Google Sign-In for Android for removal in the second half of 2025. Its current migration page still says the removal comes in a future release.","Sign-in and access to Google APIs are now separate steps. Credential Manager signs the user in; for scopes such as Google Drive, Google says to use the AuthorizationClient API.","In Flutter, google_sign_in 7.0.0 is a breaking release: GoogleSignIn is a singleton you must initialize first, and authentication and authorization are separate. On Android, google_sign_in_android 7.0.0 switched to Credential Manager.","Several failures after the move come from configuration, not code: a missing web OAuth client (serverClientId), or a missing SHA fingerprint for one build type. Some of these surface as a \"canceled\" error.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026\u002F","8pSzUx4K9oKqBaZtsSDzuiVeqr7Le04IouFOIJQw-M0",[622,948,1392],{"id":623,"title":624,"author":625,"body":627,"category":541,"createdAt":891,"description":892,"disclosure":544,"extension":545,"faq":893,"howTo":544,"lastVerified":544,"location":565,"meta":912,"navigation":572,"ogImage":544,"path":917,"primaryKeyword":918,"readingTime":919,"related":920,"seo":923,"sources":924,"stem":938,"tags":939,"takeaways":940,"updatedAt":891,"url":946,"__hash__":947},"blog\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026.md","SafetyNet Is Gone: Moving to Play Integrity and App Check",{"name":7,"social":626},{"twitter":9},{"type":11,"value":628,"toc":883},[629,635,638,642,646,705,709,720,723,743,746,750,753,797,801,809,869,871],[14,630,631,634],{},[17,632,633],{},"SafetyNet Attestation is gone: Google turned it down fully in January 2025, so any app or backend that still relies on it gets an error on every check."," Replace it with the Play Integrity API. If you used SafetyNet through Firebase App Check, switch App Check to its Play Integrity provider. For App Check users the code change is small, and most of the work is setup in Play Console and the Firebase console.",[14,636,637],{},"If you landed here from an old link to Google's SafetyNet attestation guide, that address now redirects to the deprecation timeline. Dates and behavior come from Android Developers and Firebase documentation, as listed in the sources. I checked each page on October 18, 2026.",[14,639,640,46],{},[17,641,45],{},[48,643,645],{"id":644},"what-happened-to-safetynet-and-when","What happened to SafetyNet, and when",[53,647,648,658],{},[56,649,650],{},[59,651,652,654,656],{},[62,653,64],{},[62,655,67],{},[62,657,70],{},[72,659,660,674,691],{},[59,661,662,665,668],{},[77,663,664],{},"2022",[77,666,667],{},"Google deprecates the SafetyNet Attestation API and recommends the Play Integrity API",[77,669,670],{},[86,671,149],{"href":672,"rel":673},"https:\u002F\u002Fdeveloper.android.com\u002Fprivacy-and-security\u002Fsafetynet\u002Fdeprecation-timeline",[90],[59,675,676,681,686],{},[77,677,678],{},[17,679,680],{},"January 2025",[77,682,683],{},[17,684,685],{},"SafetyNet Attestation is fully turned down",[77,687,688],{},[86,689,149],{"href":672,"rel":690},[90],[59,692,693,695,698],{},[77,694,139],{},[77,696,697],{},"Firebase App Check's SafetyNet provider is gone; Firebase says to use another provider, such as Play Integrity",[77,699,700],{},[86,701,704],{"href":702,"rel":703},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fsafetynet-provider",[90],"Firebase",[154,706,708],{"id":707},"what-failing-apps-see","What failing apps see",[14,710,711,712,715,716,719],{},"Google says that if you call the SafetyNet Attestation API now, the attest call always fails: it returns an ",[22,713,714],{},"ApiException"," with status code 7, ",[22,717,718],{},"NETWORK_ERROR",". That code is misleading, because it isn't a network problem on your side and retrying won't fix it.",[14,721,722],{},"What that means for users depends on what you did with the result:",[162,724,725,731,737],{},[165,726,727,730],{},[17,728,729],{},"If your app blocked users when attestation failed",", users on that version are blocked from whatever the check gated.",[165,732,733,736],{},[17,734,735],{},"If your backend required a SafetyNet result",", requests from that version are rejected.",[165,738,739,742],{},[17,740,741],{},"If the check only logged the result",", nothing visible broke, but you've had no integrity signal since the turndown.",[14,744,745],{},"Google's advice for the first two cases: once you've released a version that uses Play Integrity, tell users to update.",[48,747,749],{"id":748},"moving-from-safetynet-to-play-integrity","Moving from SafetyNet to Play Integrity",[14,751,752],{},"Google says the two APIs are conceptually similar, so if you already had an anti-abuse strategy built on SafetyNet, the migration is straightforward.",[211,754,755,761,773,779,785,791],{},[165,756,757,760],{},[17,758,759],{},"Set up Play Integrity in Play Console."," Open your app, go to the App integrity page, and set up the Play Integrity API there, including linking a Google Cloud project.",[165,762,763,766,767,772],{},[17,764,765],{},"Choose the request type."," Play Integrity has standard requests and classic requests. Read Google's ",[86,768,771],{"href":769,"rel":770},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fintegrity\u002Fstandard",[90],"standard request guide"," and the classic one, and pick the one that fits how often you check.",[165,774,775,778],{},[17,776,777],{},"Request a token in the app and verify it on your server."," As with SafetyNet, the app gets an integrity token and your backend decides what to do with the verdict. Don't make the decision on the device.",[165,780,781,784],{},[17,782,783],{},"Watch the quota."," By default, an app can make up to 10,000 Play Integrity requests a day across all installs. If you check on every app open with many users, ask Google for a higher daily maximum before launch.",[165,786,787,790],{},[17,788,789],{},"Collect verdicts before you block anyone."," Google suggests gathering telemetry on your current users before you change app behavior based on verdicts, and treating Play Integrity as one part of your anti-abuse strategy, not the only one.",[165,792,793,796],{},[17,794,795],{},"Remove the SafetyNet code"," and dependency once the new path works, so nobody mistakes an old error for a new problem.",[48,798,800],{"id":799},"switching-firebase-app-check-to-play-integrity","Switching Firebase App Check to Play Integrity",[14,802,803,804,209],{},"If you used SafetyNet through Firebase App Check, the steps come from Firebase's ",[86,805,808],{"href":806,"rel":807},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fplay-integrity-provider",[90],"Play Integrity setup guide",[211,810,811,821,827,833,851,863],{},[165,812,813,816,817,820],{},[17,814,815],{},"Link the projects."," In Google Play Console, open your app, go to App integrity, find the Play Integrity API section and click ",[17,818,819],{},"Link Cloud project",". Pick the same Firebase project your app is registered in. Firebase says you must be an Owner of that project yourself: being in a group that has the Owner role isn't enough.",[165,822,823,826],{},[17,824,825],{},"Register the app in Firebase."," In the Firebase console, go to Security > App Check, and register your Android app with the Play Integrity provider. You'll need the SHA-256 fingerprint of your app's signing certificate. If you use Play App Signing, use the SHA-256 of the app signing key certificate shown in Play Console, not your upload key's.",[165,828,829,832],{},[17,830,831],{},"Register every app."," Once you turn on enforcement for a Firebase product, only registered apps can reach it, so register all of your project's apps before you enforce.",[165,834,835,838,839,842,843,846,847,850],{},[17,836,837],{},"Change the provider in code."," On Android, install ",[22,840,841],{},"PlayIntegrityAppCheckProviderFactory"," before you use any other Firebase SDK. In a Flutter app, set the Android provider to Play Integrity where you activate ",[22,844,845],{},"firebase_app_check",", right after ",[22,848,849],{},"Firebase.initializeApp()",". The parameter name has changed between plugin versions, so check the docs for the version you use.",[165,852,853,856,857,862],{},[17,854,855],{},"Use the debug provider for development."," Emulators and debug builds you install yourself often can't pass Play Integrity checks. App Check's ",[86,858,861],{"href":859,"rel":860},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fapp-check\u002Fandroid\u002Fdebug-provider",[90],"debug provider"," lets those builds through. Keep its debug tokens out of release builds.",[165,864,865,868],{},[17,866,867],{},"Monitor, then enforce."," Check the App Check metrics in the Firebase console to see how many requests come from verified and unverified apps before you turn on enforcement for Firestore, Storage, Functions or other products.",[48,870,511],{"id":510},[14,872,873,874,876,877,524,881,267],{},"If App Check enforcement starts rejecting your real users, or the Play Integrity setup won't verify, the ",[86,875,518],{"href":517}," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days. For a wider check of how your Firebase app is locked down, see the ",[86,878,880],{"href":879},"\u002Fblog\u002Ffirebase-security-guide-2026\u002F","Firebase security guide",[86,882,528],{"href":527},{"title":530,"searchDepth":531,"depth":531,"links":884},[885,888,889,890],{"id":644,"depth":531,"text":645,"children":886},[887],{"id":707,"depth":536,"text":708},{"id":748,"depth":531,"text":749},{"id":799,"depth":531,"text":800},{"id":510,"depth":531,"text":511},"2026-10-19T01:00:00.000Z","Google fully turned down the SafetyNet Attestation API in January 2025, and calls now fail with error code 7. How to move to the Play Integrity API, and how to switch Firebase App Check to its Play Integrity provider, from Google's docs checked October 18, 2026.",[894,897,900,903,906,909],{"question":895,"answer":896},"Is SafetyNet still working?","No. Google says the SafetyNet Attestation API was deprecated in 2022 and fully turned down in January 2025. Any call to it now fails.",{"question":898,"answer":899},"What does SafetyNet error code 7 mean in 2026?","It means the SafetyNet Attestation API has been turned down. Google says the attest call now always fails with an ApiException and status code 7 (NETWORK_ERROR). It isn't a network problem on your side, and retrying won't help. Move to the Play Integrity API.",{"question":901,"answer":902},"What replaced SafetyNet?","The Play Integrity API. Google says it brings several integrity checks, including what SafetyNet Attestation offered, under one API. It offers standard and classic requests, and Google's docs explain when to use each.",{"question":904,"answer":905},"Does Firebase App Check still support SafetyNet?","No. Firebase says SafetyNet has been shut down and projects must use an alternative provider, such as Play Integrity. Register your Android app with the Play Integrity provider in the App Check section of the Firebase console, then switch the provider in your app's code.",{"question":907,"answer":908},"Does Play Integrity work for apps outside Google Play?","Firebase says the App Check Play Integrity provider supports Android apps published on Google Play, outside Google Play, or both. Check the Play Integrity documentation for which verdicts you get in each case.",{"question":910,"answer":911},"How many Play Integrity requests can my app make?","By default, up to 10,000 requests per day across all installs. Google lets you request a higher daily maximum.",{"readingTimeStats":913},{"text":568,"minutes":914,"time":915,"words":916},4.45,267000,890,"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026","safetynet shut down","7 min",[578,921,922],"firebase-security-guide-2026","flutter-security-best-practices-2026",{"title":624,"description":892},[925,927,930,932,934,936],{"title":926,"url":672},"Android Developers, SafetyNet Attestation API deprecation timeline",{"title":928,"url":929},"Android Developers, Play Integrity API overview","https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fintegrity\u002Foverview",{"title":931,"url":769},"Android Developers, make a standard Play Integrity request",{"title":933,"url":702},"Firebase, App Check SafetyNet turndown",{"title":935,"url":806},"Firebase, get started using App Check with Play Integrity on Android",{"title":937,"url":859},"Firebase, use App Check with the debug provider on Android","blog\u002Fsafetynet-shut-down-play-integrity-app-check-2026","safetynet shut down, safetynet attestation deprecated, safetynet alternative, play integrity api migration, safetynet error code 7, firebase app check safetynet, app check play integrity provider, safetynet to play integrity, android app attestation 2026, flutter app check android",[941,942,943,944,945],"Google deprecated the SafetyNet Attestation API in 2022 and fully turned it down in January 2025. Its replacement is the Play Integrity API.","An app that still calls SafetyNet attestation gets an error every time: Google says the call fails with an ApiException and status code 7 (NETWORK_ERROR).","Firebase App Check's SafetyNet provider is gone too. Firebase says projects must use another provider, such as Play Integrity.","By default, an app can make up to 10,000 Play Integrity requests a day across all installs, and you can ask Google for more.","The App Check setup steps to get right are the Cloud project link in Play Console, the correct SHA-256 fingerprint, and registering every app before you enforce.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","d8cTEcucqDDi5LH3lHnMC91m94dkdZLDbm6jJnJWTCc",{"id":949,"title":950,"author":951,"body":953,"category":541,"createdAt":1331,"description":1332,"disclosure":544,"extension":545,"faq":1333,"howTo":544,"lastVerified":544,"location":565,"meta":1352,"navigation":572,"ogImage":544,"path":1358,"primaryKeyword":1359,"readingTime":575,"related":1360,"seo":1364,"sources":1365,"stem":1382,"tags":1383,"takeaways":1384,"updatedAt":1331,"url":1390,"__hash__":1391},"blog\u002Fblog\u002Ffirebase-deprecations-shutdown-dates-2026.md","Firebase Deprecations: Every Shutdown Date, 2024 to 2027",{"name":7,"social":952},{"twitter":9},{"type":11,"value":954,"toc":1319},[955,961,964,969,973,1173,1177,1181,1184,1187,1191,1194,1197,1200,1232,1236,1239,1243,1252,1256,1259,1263,1308,1310],[14,956,957,960],{},[17,958,959],{},"Firebase isn't shutting down, but seven of its products and APIs are being retired between 2024 and 2027, and five of the deadlines fall in 2027."," If your app uses Extensions, Firebase Studio, Firebase ML model hosting, Test Lab, device groups or the old FCM InstanceId APIs, you have a deadline. The table below lists each one with the date, what stops working and where Firebase says to move.",[14,962,963],{},"Every date here comes from Firebase's own documentation, linked in each row and in the sources. I checked each page on October 18, 2026. Google can change a deadline, so open the linked page before you plan around one.",[14,965,966,968],{},[17,967,45],{}," App369 is my studio. I build Flutter and Firebase apps, and I run my own product, Workspace369, on Firebase. The last section mentions what I sell. Google doesn't pay me for anything on this page.",[48,970,972],{"id":971},"every-firebase-shutdown-in-date-order","Every Firebase shutdown, in date order",[53,974,975,993],{},[56,976,977],{},[59,978,979,982,985,988,991],{},[62,980,981],{},"Deadline",[62,983,984],{},"What is retired",[62,986,987],{},"What stops working",[62,989,990],{},"Move to",[62,992,70],{},[72,994,995,1028,1053,1075,1097,1119,1151],{},[59,996,997,1004,1007,1014,1021],{},[77,998,999,1000,1003],{},"From ",[17,1001,1002],{},"July 22, 2024"," (done)",[77,1005,1006],{},"Legacy FCM HTTP and XMPP send APIs",[77,1008,1009,1010,1013],{},"Sending with a server key to ",[22,1011,1012],{},"fcm\u002Fsend",". Deprecated June 20, 2023",[77,1015,1016,1017],{},"FCM HTTP v1 API or the Admin SDK. ",[86,1018,1020],{"href":1019},"\u002Fblog\u002Ffcm-legacy-api-shutdown-http-v1-migration-2026\u002F","My guide",[77,1022,1023],{},[86,1024,1027],{"href":1025,"rel":1026},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20260108211426\u002Fhttps:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fcloud-messaging\u002Fmigrate-v1",[90],"Firebase (archived)",[59,1029,1030,1035,1038,1041,1047],{},[77,1031,1032,1003],{},[17,1033,1034],{},"August 25, 2025",[77,1036,1037],{},"Firebase Dynamic Links",[77,1039,1040],{},"Dynamic Links, and email link sign-in that relied on them",[77,1042,1043,1044],{},"Your own deep links. For email link sign-in, Firebase Authentication Android SDK 23.2.0 or later (BoM 33.9.0 or later). ",[86,1045,1020],{"href":1046},"\u002Fblog\u002Ffirebase-dynamic-links-shutdown-deep-linking-2026\u002F",[77,1048,1049],{},[86,1050,704],{"href":1051,"rel":1052},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Femail-link-migration",[90],[59,1054,1055,1060,1063,1066,1069],{},[77,1056,1057],{},[17,1058,1059],{},"March 22, 2027",[77,1061,1062],{},"Firebase Studio",[77,1064,1065],{},"Existing workspaces. New workspaces and signups already stopped on June 22, 2026",[77,1067,1068],{},"Google AI Studio, Google Antigravity, or an export of your source to another platform",[77,1070,1071],{},[86,1072,704],{"href":1073,"rel":1074},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fstudio\u002Fmigrating-project",[90],[59,1076,1077,1082,1085,1088,1091],{},[77,1078,1079],{},[17,1080,1081],{},"March 31, 2027",[77,1083,1084],{},"Firebase Extensions",[77,1086,1087],{},"Updating, reconfiguring or uninstalling extensions, or downloading their configuration, through the console or CLI. Installed extensions keep running",[77,1089,1090],{},"Function kits on npm where the publisher offers one, or your own Cloud Functions (2nd gen)",[77,1092,1093],{},[86,1094,704],{"href":1095,"rel":1096},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fextensions\u002Ffaq-and-troubleshooting",[90],[59,1098,1099,1104,1107,1110,1113],{},[77,1100,1101],{},[17,1102,1103],{},"June 15, 2027",[77,1105,1106],{},"Firebase ML custom model hosting",[77,1108,1109],{},"Hosting and serving custom models through Firebase ML",[77,1111,1112],{},"Cloud Storage for Firebase, per Firebase's guide",[77,1114,1115],{},[86,1116,704],{"href":1117,"rel":1118},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fml\u002Fmigrate-to-cloud-storage",[90],[59,1120,1121,1126,1129,1136,1145],{},[77,1122,1123],{},[17,1124,1125],{},"September 29, 2027",[77,1127,1128],{},"FCM InstanceId server APIs and device groups",[77,1130,1131,1132,1135],{},"Requests to ",[22,1133,1134],{},"iid.googleapis.com"," and device group management start failing. New users are blocked after January 1, 2027",[77,1137,1138,1139,1142,1143],{},"The FCM topic subscription API, HTTP v1 with ",[22,1140,1141],{},"validate_only",", and sends to individual tokens. ",[86,1144,1020],{"href":1019},[77,1146,1147],{},[86,1148,704],{"href":1149,"rel":1150},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fcloud-messaging\u002Ftroubleshooting#fcm-26-deprecation",[90],[59,1152,1153,1158,1161,1164,1167],{},[77,1154,1155],{},[17,1156,1157],{},"September 30, 2027",[77,1159,1160],{},"Firebase Test Lab",[77,1162,1163],{},"All of Test Lab",[77,1165,1166],{},"The Developer Device Platform on Google Cloud",[77,1168,1169],{},[86,1170,704],{"href":1171,"rel":1172},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Ftest-lab",[90],[48,1174,1176],{"id":1175},"what-each-2027-deadline-means-in-practice","What each 2027 deadline means in practice",[154,1178,1180],{"id":1179},"firebase-studio-march-22-2027","Firebase Studio: March 22, 2027",[14,1182,1183],{},"Firebase Studio launched as a preview to explore AI-driven, full-stack app development. Firebase's migration page points to Google AI Studio, for rapid browser-based prototyping, and Google Antigravity, for code-first agentic work. You can keep working in an existing workspace until March 22, 2027. Any project you want to keep must be migrated before then, and Firebase's page has steps for both destinations and for exporting the source to anywhere else.",[14,1185,1186],{},"Your Firebase backend isn't affected. Firebase says Firestore, Authentication, App Hosting and your data keep working outside Firebase Studio. One thing to test after a move: Firebase's own FAQ has an entry about Google Sign-In not working after migrating to Google AI Studio, so check sign-in first.",[154,1188,1190],{"id":1189},"firebase-extensions-march-31-2027","Firebase Extensions: March 31, 2027",[14,1192,1193],{},"This one is easy to miss, because nothing breaks on the day. Firebase says installed extensions run on standard Google Cloud services (Cloud Functions, Eventarc, Cloud Run, Cloud Tasks) and keep executing. What you lose after March 31, 2027 is control: you can't change parameters or environment variables, apply fixes or security patches, uninstall through the console or CLI, or download the configuration to set up a replacement.",[14,1195,1196],{},"There's a second risk. Firebase notes that most extensions are built on the legacy Cloud Functions v1 SDK and older Node.js runtimes, and that functions may stop running or be disabled when Google Cloud retires those runtimes. So an extension you can't update may stop working once those runtimes are retired, and you won't be able to patch it.",[14,1198,1199],{},"Before March 31, 2027:",[211,1201,1202,1208,1214,1220],{},[165,1203,1204,1207],{},[17,1205,1206],{},"List what's installed."," In the Firebase console, open Extensions for each project, including staging and old projects.",[165,1209,1210,1213],{},[17,1211,1212],{},"Uninstall what you no longer use."," After the deadline the Uninstall button goes away, and you'd have to delete the underlying resources by hand.",[165,1215,1216,1219],{},[17,1217,1218],{},"Export the configuration of the rest."," You need the parameters to set up a replacement.",[165,1221,1222,1225,1226,1231],{},[17,1223,1224],{},"Replace each one."," Use the publisher's function kit on npm if there is one. If not, the extensions are open source, so a developer can rebuild one as Cloud Functions (2nd gen). Firebase's ",[86,1227,1230],{"href":1228,"rel":1229},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fextensions\u002Fusers\u002Fmigrate",[90],"guide for users"," covers both.",[154,1233,1235],{"id":1234},"firebase-ml-model-hosting-june-15-2027","Firebase ML model hosting: June 15, 2027",[14,1237,1238],{},"This only matters if you host custom TensorFlow Lite models through Firebase ML. On-device ML Kit features are a separate product. Firebase's suggested route is to download your models and host them in Cloud Storage for Firebase, and its guide covers Android, Apple platforms and Flutter, plus an optional move to the LiteRT CompiledModel API.",[154,1240,1242],{"id":1241},"fcm-instanceid-apis-and-device-groups-september-29-2027","FCM InstanceId APIs and device groups: September 29, 2027",[14,1244,1245,1246,1248,1249,267],{},"If your server checks tokens with ",[22,1247,1134],{},", manages topic subscriptions through the old InstanceId endpoints, imports APNs tokens in bulk, or uses device groups, those calls start failing after September 29, 2027. If you manage topics through an older Firebase Admin SDK, you're affected too. I cover each case and the replacement in the ",[86,1250,1251],{"href":1019},"FCM guide",[154,1253,1255],{"id":1254},"test-lab-september-30-2027","Test Lab: September 30, 2027",[14,1257,1258],{},"Test Lab runs your Android and iOS tests on devices in Google's data centers. Firebase says it will be fully shut down on September 30, 2027, and points to the Developer Device Platform on Google Cloud, with a migration guide and FAQ linked from the Test Lab page. If Test Lab runs in your CI pipeline, budget time to move it and to compare device coverage and pricing before the deadline.",[48,1260,1262],{"id":1261},"a-one-hour-check-for-your-project","A one-hour check for your project",[211,1264,1265,1290,1296,1302],{},[165,1266,1267,1270,1271,222,1273,222,1276,222,1279,1282,1283,1286,1287,267],{},[17,1268,1269],{},"Search your code"," for ",[22,1272,1134],{},[22,1274,1275],{},"fcm.googleapis.com\u002Ffcm\u002F",[22,1277,1278],{},"page.link",[22,1280,1281],{},"firebase-ml-modeldownloader"," (or ",[22,1284,1285],{},"firebase_ml_model_downloader"," in Flutter), and ",[22,1288,1289],{},"gcloud firebase test",[165,1291,1292,1295],{},[17,1293,1294],{},"Open the Firebase console"," for every project you own and look at Extensions, Machine Learning, Test Lab and Studio.",[165,1297,1298,1301],{},[17,1299,1300],{},"Write down each deadline"," that applies, with the owner of the fix and a target date at least a month early.",[165,1303,1304,1307],{},[17,1305,1306],{},"Start with the earliest deadlines."," Of the 2027 ones, Studio and Extensions come first, in March.",[48,1309,511],{"id":510},[14,1311,1312,1313,1315,1316,1318],{},"If one of these migrations breaks something, such as pushes that stop arriving, a sign-in flow that fails after a move, or a Cloud Function that won't deploy, the ",[86,1314,518],{"href":517}," covers it in two fixed-price steps. A $450 Diagnosis gives you the root cause with evidence and a fixed repair quote within 3 business days, credited toward the fix. If you go ahead, the $1,200 Fix takes 5 business days. If you want help planning several migrations at once, ",[86,1317,528],{"href":527}," of your project.",{"title":530,"searchDepth":531,"depth":531,"links":1320},[1321,1322,1329,1330],{"id":971,"depth":531,"text":972},{"id":1175,"depth":531,"text":1176,"children":1323},[1324,1325,1326,1327,1328],{"id":1179,"depth":536,"text":1180},{"id":1189,"depth":536,"text":1190},{"id":1234,"depth":536,"text":1235},{"id":1241,"depth":536,"text":1242},{"id":1254,"depth":536,"text":1255},{"id":1261,"depth":531,"text":1262},{"id":510,"depth":531,"text":511},"2026-10-18T23:00:00.000Z","Every Firebase shutdown from 2024 to 2027 in one dated table: FCM legacy APIs, Dynamic Links, Firebase Studio, Extensions, Firebase ML model hosting, the FCM InstanceId APIs and Test Lab. What stops working, the deadline, and what to move to, from Firebase's own docs checked October 18, 2026.",[1334,1337,1340,1343,1346,1349],{"question":1335,"answer":1336},"Is Firebase shutting down?","No. Firebase is retiring some products and APIs, but core services such as Firestore, Authentication, Cloud Functions and Hosting are not on any shutdown list I found. Firebase says the Firebase Studio sunset doesn't affect Firestore, Authentication or App Hosting.",{"question":1338,"answer":1339},"What Firebase products are being deprecated in 2027?","Firebase Studio sunsets on March 22, 2027, Firebase Extensions shuts down on March 31, 2027, Firebase ML custom model hosting on June 15, 2027, the FCM InstanceId server APIs and device groups on September 29, 2027, and Test Lab on September 30, 2027.",{"question":1341,"answer":1342},"Will my Firebase Extensions stop working on March 31, 2027?","Not immediately. Firebase says already-deployed extensions keep running on Google Cloud infrastructure, but after March 31, 2027 you can't update, reconfigure or uninstall them through the Firebase console or CLI, or download their configuration. Firebase also warns that most extensions use the legacy Cloud Functions v1 SDK, which may stop running when older runtimes are decommissioned.",{"question":1344,"answer":1345},"What replaces Firebase Test Lab?","Firebase points Test Lab users to the Developer Device Platform on Google Cloud, with a migration guide and FAQ. Test Lab will be fully shut down on September 30, 2027.",{"question":1347,"answer":1348},"What happens to apps I built in Firebase Studio?","New workspaces and signups were disabled on June 22, 2026. You can keep working in existing workspaces until March 22, 2027, but you must migrate any project you want to keep before then. Firebase offers migration paths to Google AI Studio, Google Antigravity, or exporting the source to another platform.",{"question":1350,"answer":1351},"Where can I host custom ML models after Firebase ML?","Firebase suggests Cloud Storage for Firebase and has a guide for downloading your TensorFlow Lite models and uploading them there, with steps for Android, Apple platforms and Flutter. Firebase ML model hosting shuts down on June 15, 2027.",{"readingTimeStats":1353},{"text":1354,"minutes":1355,"time":1356,"words":1357},"6 min read",5.255,315300,1051,"\u002Fblog\u002Ffirebase-deprecations-shutdown-dates-2026","firebase deprecations",[1361,1362,1363],"fcm-legacy-api-shutdown-http-v1-migration-2026","firebase-dynamic-links-shutdown-deep-linking-2026","how-to-cut-your-firebase-bill-2026",{"title":950,"description":1332},[1366,1368,1370,1372,1374,1376,1378,1380],{"title":1367,"url":1025},"Firebase, migrate from legacy FCM APIs to HTTP v1 (Wayback Machine copy, January 8, 2026)",{"title":1369,"url":1051},"Firebase, migrating email link sign-in off Dynamic Links (Android)",{"title":1371,"url":1073},"Firebase, Firebase Studio sunset and project migration",{"title":1373,"url":1095},"Firebase, Firebase Extensions deprecation FAQ",{"title":1375,"url":1228},"Firebase, migrate an extension to Cloud Functions as a user",{"title":1377,"url":1117},"Firebase, migrate custom models from Firebase ML to Cloud Storage",{"title":1379,"url":1149},"Firebase, FCM InstanceId API and device group deprecation (FAQ, announced September 2026)",{"title":1381,"url":1171},"Firebase, Test Lab (deprecation notice)","blog\u002Ffirebase-deprecations-shutdown-dates-2026","firebase deprecations, firebase shutdown dates, firebase extensions deprecated, firebase test lab shut down, firebase studio sunset, firebase ml model hosting shut down, firebase dynamic links shutdown, fcm legacy api shutdown, firebase deprecation 2027, firebase migration checklist",[1385,1386,1387,1388,1389],"Five Firebase deadlines fall between March and September 2027: Firebase Studio (March 22), Extensions (March 31), Firebase ML model hosting (June 15), the FCM InstanceId APIs and device groups (September 29) and Test Lab (September 30).","Two shutdowns have already happened: sending through the legacy FCM APIs, from July 22, 2024, and Firebase Dynamic Links, on August 25, 2025.","Core services such as Firestore, Authentication, Cloud Functions and Hosting are not on the list, and Firebase says the Studio sunset doesn't affect Firestore, Authentication or App Hosting.","Installed Firebase Extensions keep running after March 31, 2027, but you can no longer update, reconfigure or uninstall them through Firebase, so migrate or uninstall them before then.","Every date here comes from Firebase's own documentation, checked on October 18, 2026. Deadlines can move, so check the linked page before you plan around one.","https:\u002F\u002Fapp369.com\u002Fblog\u002Ffirebase-deprecations-shutdown-dates-2026\u002F","BpHAcwqYVytb8j5WzV2iLR9VQxaMgK0HS82seK6p2zU",{"id":1393,"title":1394,"author":1395,"body":1397,"category":541,"createdAt":1789,"description":1790,"disclosure":544,"extension":545,"faq":544,"howTo":544,"lastVerified":544,"location":565,"meta":1791,"navigation":572,"ogImage":544,"path":1796,"primaryKeyword":544,"readingTime":1797,"related":544,"seo":1798,"sources":544,"stem":1799,"tags":1800,"takeaways":544,"updatedAt":1789,"url":1801,"__hash__":1802},"blog\u002Fblog\u002Fhow-to-debug-a-flutter-firebase-bug-2026.md","How to Debug a Flutter and Firebase Bug: Find the Root Cause (2026)",{"name":7,"social":1396},{"twitter":9},{"type":11,"value":1398,"toc":1768},[1399,1405,1413,1417,1420,1434,1437,1441,1444,1531,1540,1544,1552,1556,1560,1597,1601,1604,1619,1623,1649,1653,1677,1681,1688,1692,1700,1704,1715,1719,1723,1731,1735,1741,1745,1754,1758,1761,1765],[14,1400,1401,1404],{},[17,1402,1403],{},"Most Flutter and Firebase bugs that take days to fix take days to find, not to fix."," Once you can reproduce the bug on demand and you know which layer it lives in (the app, Firebase's servers, or the build tooling), the fix is usually small. This guide is the order to work in, then the five problems that come up most.",[14,1406,1407,1408,1412],{},"It is the method behind App369's ",[86,1409,1411],{"href":1410},"\u002Ffixed-price\u002F#fix-ticket","fixed-price Flutter & Firebase Fix Ticket",", and the one Simon uses on his own production Flutter and Firebase SaaS, Workspace369.",[48,1414,1416],{"id":1415},"step-1-write-down-exact-reproduction-steps","Step 1: Write down exact reproduction steps",[14,1418,1419],{},"Before reading any code, write the bug as steps someone else could follow:",[211,1421,1422,1425,1428,1431],{},[165,1423,1424],{},"Which build: the app version, build number, and whether it is debug, profile or release.",[165,1426,1427],{},"Which device and OS version, and whether it happens on web, iOS, Android or all three.",[165,1429,1430],{},"Which account or data: a new user, an existing user, a specific record.",[165,1432,1433],{},"The exact taps, and what you expected versus what happened.",[14,1435,1436],{},"If it only happens \"sometimes\", note what the failing cases have in common: a slow network, a large account, the app coming back from the background. A bug you can't reproduce can't be verified as fixed.",[48,1438,1440],{"id":1439},"step-2-find-out-which-layer-is-failing","Step 2: Find out which layer is failing",[14,1442,1443],{},"Each layer has its own log, and the error is usually already in one of them:",[53,1445,1446,1456],{},[56,1447,1448],{},[59,1449,1450,1453],{},[62,1451,1452],{},"Layer",[62,1454,1455],{},"Where to look",[72,1457,1458,1476,1489,1500,1515],{},[59,1459,1460,1463],{},[77,1461,1462],{},"Flutter app",[77,1464,1465,1466,1469,1470,1475],{},"The ",[22,1467,1468],{},"flutter run"," console, and ",[86,1471,1474],{"href":1472,"rel":1473},"https:\u002F\u002Fdocs.flutter.dev\u002Ftools\u002Fdevtools",[90],"Flutter DevTools"," for widgets, network and memory",[59,1477,1478,1481],{},[77,1479,1480],{},"Release builds in users' hands",[77,1482,1483,1488],{},[86,1484,1487],{"href":1485,"rel":1486},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fcrashlytics",[90],"Firebase Crashlytics"," for crashes and non-fatal errors you record",[59,1490,1491,1494],{},[77,1492,1493],{},"Cloud Functions",[77,1495,1496,1497],{},"Logs Explorer in the Google Cloud console, or ",[22,1498,1499],{},"firebase functions:log",[59,1501,1502,1505],{},[77,1503,1504],{},"Firestore and Storage",[77,1506,1507,1508,1511,1512],{},"The exact error code your app receives, such as ",[22,1509,1510],{},"permission-denied"," or ",[22,1513,1514],{},"failed-precondition",[59,1516,1517,1520],{},[77,1518,1519],{},"Build tooling",[77,1521,1522,1523,1526,1527,1530],{},"The full output of ",[22,1524,1525],{},"flutter build"," with ",[22,1528,1529],{},"-v",", plus Xcode or Gradle's own logs",[14,1532,1533,1534,1536,1537,1539],{},"A Firestore ",[22,1535,1510],{}," error means Security Rules refused the request; it is not an app crash. A ",[22,1538,1514],{}," error on a query often includes a link to create the missing index. Read the full message before changing code.",[48,1541,1543],{"id":1542},"step-3-isolate-it-with-the-emulator-suite","Step 3: Isolate it with the Emulator Suite",[14,1545,1465,1546,1551],{},[86,1547,1550],{"href":1548,"rel":1549},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Femulator-suite",[90],"Firebase Local Emulator Suite"," runs Auth, Firestore, Functions and Storage on your machine. Point a debug build at the emulators, load the data that triggers the bug, and you can repeat the failing steps as often as you need without touching production data. Security Rules problems in particular are easier to see in the emulator UI, which shows which rule allowed or denied each request.",[48,1553,1555],{"id":1554},"the-five-issues-that-come-up-most","The five issues that come up most",[154,1557,1559],{"id":1558},"build-failures","Build failures",[162,1561,1562,1569,1587,1594],{},[165,1563,1564,1565,1568],{},"Run ",[22,1566,1567],{},"flutter doctor -v"," first. It catches missing toolchains, licenses and Xcode or Android SDK problems.",[165,1570,1571,1572,1575,1576,25,1579,1582,1583,1586],{},"For iOS, check the minimum iOS version in the ",[22,1573,1574],{},"Podfile"," against what your Firebase plugins require, then run ",[22,1577,1578],{},"pod repo update",[22,1580,1581],{},"pod install"," in the ",[22,1584,1585],{},"ios"," folder.",[165,1588,1589,1590,1593],{},"For Android, check that the Android Gradle Plugin, Gradle and Kotlin versions are compatible with each other, and that ",[22,1591,1592],{},"minSdkVersion"," meets your plugins' minimum.",[165,1595,1596],{},"After upgrading Flutter or the FlutterFire plugins, upgrade all FlutterFire plugins together; mixed versions are a common cause of build errors.",[154,1598,1600],{"id":1599},"login-loops","Login loops",[14,1602,1603],{},"A user signs in and lands back on the sign-in screen, or the app flickers between screens. The usual causes:",[162,1605,1606,1613,1616],{},[165,1607,1608,1609,1612],{},"The router redirects before Firebase Auth has restored the session. On a cold start, ",[22,1610,1611],{},"authStateChanges()"," emits once the saved user is loaded; decide the first screen after that first event, not before.",[165,1614,1615],{},"Redirect logic that reads two different sources of truth, such as the auth state and a user profile document that hasn't loaded yet.",[165,1617,1618],{},"On web, the redirect sign-in flow returning to a page that immediately redirects again.",[154,1620,1622],{"id":1621},"firestore-writes-that-hang","Firestore writes that hang",[14,1624,1625,1626,1511,1629,1632,1633,1636,1637,1639,1640,1642,1643,1645,1646,1648],{},"A ",[22,1627,1628],{},"set()",[22,1630,1631],{},"update()"," call whose ",[22,1634,1635],{},"Future"," never completes is often not stuck at all. With offline persistence, which is on by default on Android and iOS, the write is applied to the local cache immediately, and the ",[22,1638,1635],{}," completes only when the server confirms it. On a poor connection or with no connection, that can take a long time. Don't block the UI on the ",[22,1641,1635],{},": let the snapshot listener show the change. If the write is rejected, the ",[22,1644,1635],{}," completes with an error such as ",[22,1647,1510],{},", so make sure something catches and reports it.",[154,1650,1652],{"id":1651},"cloud-function-errors","Cloud Function errors",[162,1654,1655,1661,1668,1674],{},[165,1656,1657,1658,267],{},"Read the function's own logs before the client error; the client often only receives ",[22,1659,1660],{},"internal",[165,1662,1663,1664,1667],{},"In callable functions, throw an ",[22,1665,1666],{},"HttpsError"," with a clear code and message, so the app can show a useful error instead of a generic one.",[165,1669,1670,1671,267],{},"Check the function's region in the app matches where it is deployed; a callable in the wrong region returns ",[22,1672,1673],{},"not-found",[165,1675,1676],{},"For timeouts, compare the configured timeout and memory with what the function actually does.",[154,1678,1680],{"id":1679},"a-broken-screen","A broken screen",[14,1682,1683,1684,1687],{},"A red error screen in debug, or a grey one in release, means an exception was thrown during build. The console shows the first exception; fix that one first, because later errors are often caused by it. Common causes are a ",[22,1685,1686],{},"null"," value from a document field that doesn't exist on older records, and a list or column without bounded height inside a scrolling parent.",[48,1689,1691],{"id":1690},"fix-it-with-a-test","Fix it with a test",[14,1693,1694,1695,1699],{},"When you've found the root cause, write a test that fails because of it, then make it pass. Widget tests cover screens and state; the ",[86,1696,1698],{"href":1548,"rel":1697},[90],"Firebase emulators"," let integration tests and Security Rules tests run against real Firebase behavior. The test keeps the bug from coming back in the next release.",[48,1701,1703],{"id":1702},"when-to-get-help","When to get help",[14,1705,1706,1707,1710,1711,1714],{},"If a bug has eaten more than a day, App369 offers a ",[86,1708,1709],{"href":1410},"fixed-price Fix Ticket",". The $450 Diagnosis delivers the root cause with evidence and a fixed repair quote within 3 business days, and the $450 is credited toward the fix. The $1,200 Fix delivers one scoped defect fixed as a pull request, with a regression test and handover notes, within 5 business days. If the problem turns out to be your Security Rules, the ",[86,1712,1713],{"href":879},"Firebase Security Rules guide"," is a good next read.",[48,1716,1718],{"id":1717},"frequently-asked-questions","Frequently Asked Questions",[154,1720,1722],{"id":1721},"why-does-my-firestore-write-never-finish","Why does my Firestore write never finish?",[14,1724,1725,1726,1728,1729,267],{},"With offline persistence, a write is saved to the local cache at once, but its ",[22,1727,1635],{}," completes only when the server confirms it. On a slow or missing connection that can take a long time. Show the change from your snapshot listener instead of waiting on the write, and catch errors such as ",[22,1730,1510],{},[154,1732,1734],{"id":1733},"why-does-my-flutter-app-keep-returning-to-the-login-screen","Why does my Flutter app keep returning to the login screen?",[14,1736,1737,1738,1740],{},"Usually because the router decides where to go before Firebase Auth has restored the saved session, or because redirect logic depends on data that hasn't loaded yet. Wait for the first ",[22,1739,1611],{}," event before choosing the first screen.",[154,1742,1744],{"id":1743},"how-do-i-see-cloud-functions-errors","How do I see Cloud Functions errors?",[14,1746,1747,1748,1750,1751,1753],{},"In Logs Explorer in the Google Cloud console, or with ",[22,1749,1499],{},". The app often receives only a generic ",[22,1752,1660],{}," error, so the function's own logs are where the real message is.",[154,1755,1757],{"id":1756},"can-i-debug-firebase-without-touching-production-data","Can I debug Firebase without touching production data?",[14,1759,1760],{},"Yes. The Firebase Local Emulator Suite runs Auth, Firestore, Functions and Storage locally. Load test data that reproduces the bug and point a debug build at the emulators.",[154,1762,1764],{"id":1763},"what-should-i-send-a-developer-to-fix-a-flutter-bug","What should I send a developer to fix a Flutter bug?",[14,1766,1767],{},"Exact reproduction steps, the app version and build number, the device and OS, the error message or a screen recording, and access to the repository. With those, a developer can usually reproduce the bug on the first try.",{"title":530,"searchDepth":531,"depth":531,"links":1769},[1770,1771,1772,1773,1780,1781,1782],{"id":1415,"depth":531,"text":1416},{"id":1439,"depth":531,"text":1440},{"id":1542,"depth":531,"text":1543},{"id":1554,"depth":531,"text":1555,"children":1774},[1775,1776,1777,1778,1779],{"id":1558,"depth":536,"text":1559},{"id":1599,"depth":536,"text":1600},{"id":1621,"depth":536,"text":1622},{"id":1651,"depth":536,"text":1652},{"id":1679,"depth":536,"text":1680},{"id":1690,"depth":531,"text":1691},{"id":1702,"depth":531,"text":1703},{"id":1717,"depth":531,"text":1718,"children":1783},[1784,1785,1786,1787,1788],{"id":1721,"depth":536,"text":1722},{"id":1733,"depth":536,"text":1734},{"id":1743,"depth":536,"text":1744},{"id":1756,"depth":536,"text":1757},{"id":1763,"depth":536,"text":1764},"2026-10-12T15:00:00.000Z","Find the root cause of a Flutter and Firebase bug: reproduce it, read the right logs, isolate it with the Emulator Suite, and fix the five most common issues.",{"readingTimeStats":1792},{"text":1354,"minutes":1793,"time":1794,"words":1795},5.665,339900,1133,"\u002Fblog\u002Fhow-to-debug-a-flutter-firebase-bug-2026","9 min",{"title":1394,"description":1790},"blog\u002Fhow-to-debug-a-flutter-firebase-bug-2026","flutter debugging, firebase debugging, flutter build failure, firebase auth, firestore, cloud functions errors","https:\u002F\u002Fapp369.com\u002Fblog\u002Fhow-to-debug-a-flutter-firebase-bug-2026\u002F","QDPYxmm3Fehb3Vf0Z6wQbyw2Gl0hMxaPERHN5zv-A2s",[1804,1806,1810,1814,1816],{"keyword":5,"url":619,"title":5,"relevance":1805},81,{"keyword":1807,"url":1808,"title":1807,"relevance":1809},"Flutter vs Native in 2026: An Honest Decision Guide","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-vs-native-app-development-2026\u002F",9,{"keyword":1811,"url":1812,"title":1811,"relevance":1813},"JCenter Shutdown: Fixing Old Android and Flutter Builds","https:\u002F\u002Fapp369.com\u002Fblog\u002Fjcenter-bintray-shut-down-fix-android-flutter-builds-2026\u002F",8,{"keyword":624,"url":946,"title":624,"relevance":1815},7,{"keyword":1817,"url":1818,"title":1817,"relevance":1819},"Best Android App Development Companies in 2026","https:\u002F\u002Fapp369.com\u002Fblog\u002Fbest-app-development-company-android-2026\u002F",6,1792329333675]