[{"data":1,"prerenderedAt":3015},["ShallowReactive",2],{"\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027\u002F":3,"\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027\u002F-related":499,"\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027\u002F-resources":2996},{"id":4,"title":5,"author":6,"body":10,"category":430,"createdAt":431,"description":432,"disclosure":433,"extension":434,"faq":435,"howTo":433,"lastVerified":433,"location":451,"meta":452,"navigation":458,"ogImage":433,"path":459,"primaryKeyword":460,"readingTime":461,"related":462,"seo":466,"sources":467,"stem":489,"tags":490,"takeaways":491,"updatedAt":431,"url":497,"__hash__":498},"blog\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027.md","Facebook Graph API Version Expiry Dates 2027",{"name":7,"social":8},"Simon Dziak",{"twitter":9},"@SzymonDziak",{"type":11,"value":12,"toc":417},"minimark",[13,20,23,29,34,37,149,152,157,160,213,216,220,223,229,235,241,247,250,254,257,314,318,321,343,350,354,392,401,405],[14,15,16],"p",{},[17,18,19],"strong",{},"Meta's Graph API changelog lists three versions with an Available Until date between October 19, 2026 and the end of 2027: v21.0 on January 21, 2027, v22.0 on May 20, 2027 and v23.0 on October 8, 2027. The newest version is v26.0, introduced July 29, 2026, with no end date yet. Meta's versioning guide says calls to a Graph API version that is no longer usable default to the next oldest, usable version, so the practical risk is a silent change in behavior, not a clean error. The Marketing API has a separate, shorter schedule, and two Meta pages disagree on it.",[14,21,22],{},"I checked Meta's pages on October 19, 2026. Meta can change a date, so open the linked page before you plan around it.",[14,24,25,28],{},[17,26,27],{},"Disclosure:"," App369 is my studio. I build and fix Flutter and Firebase apps, and the last section mentions what I sell. Meta doesn't pay me for anything on this page, and I have no connection to Meta.",[30,31,33],"h2",{"id":32},"the-dated-table","The dated table",[14,35,36],{},"This is the Graph API table from Meta's changelog, with the dates as written. I read the raw page text, so the dates are exact.",[38,39,40,56],"table",{},[41,42,43],"thead",{},[44,45,46,50,53],"tr",{},[47,48,49],"th",{},"Version",[47,51,52],{},"Released (Date Introduced)",[47,54,55],{},"Available Until",[57,58,59,71,82,93,108,123,138],"tbody",{},[44,60,61,65,68],{},[62,63,64],"td",{},"v26.0 (latest)",[62,66,67],{},"July 29, 2026",[62,69,70],{},"TBD",[44,72,73,76,79],{},[62,74,75],{},"v25.0",[62,77,78],{},"February 18, 2026",[62,80,81],{},"July 29, 2028",[44,83,84,87,90],{},[62,85,86],{},"v24.0",[62,88,89],{},"October 8, 2025",[62,91,92],{},"February 18, 2028",[44,94,95,100,103],{},[62,96,97],{},[17,98,99],{},"v23.0",[62,101,102],{},"May 29, 2025",[62,104,105],{},[17,106,107],{},"October 8, 2027",[44,109,110,115,118],{},[62,111,112],{},[17,113,114],{},"v22.0",[62,116,117],{},"January 21, 2025",[62,119,120],{},[17,121,122],{},"May 20, 2027",[44,124,125,130,133],{},[62,126,127],{},[17,128,129],{},"v21.0",[62,131,132],{},"October 2, 2024",[62,134,135],{},[17,136,137],{},"January 21, 2027",[44,139,140,143,146],{},[62,141,142],{},"v20.0",[62,144,145],{},"May 21, 2024",[62,147,148],{},"September 24, 2026",[14,150,151],{},"Bold rows are the versions whose Available Until date falls between October 19, 2026 and the end of 2027. v20.0 is in the table for context: its date, September 24, 2026, had already passed when I checked. v24.0 and v25.0 run into 2028. I use the table dates as written.",[153,154,156],"h3",{"id":155},"the-marketing-api-has-its-own-dates","The Marketing API has its own dates",[14,158,159],{},"Meta's Graph API versioning guide says the Marketing API has its own versioning scheme, with numbers and schedules different from the Graph API's. The Marketing API versioning page describes a grace period of at least 90 days instead of the Graph API's two years. The two Meta pages I read list different Available Until dates for the same versions.",[38,161,162,177],{},[41,163,164],{},[44,165,166,168,171,174],{},[47,167,49],{},[47,169,170],{},"Released",[47,172,173],{},"Available Until, Graph API changelog",[47,175,176],{},"Available Until, Marketing API changelog",[57,178,179,190,201],{},[44,180,181,184,186,188],{},[62,182,183],{},"v26.0",[62,185,67],{},[62,187,70],{},[62,189,70],{},[44,191,192,194,196,198],{},[62,193,75],{},[62,195,78],{},[62,197,70],{},[62,199,200],{},"February 23, 2027",[44,202,203,205,207,210],{},[62,204,86],{},[62,206,89],{},[62,208,209],{},"October 6, 2026",[62,211,212],{},"November 10, 2026",[14,214,215],{},"The Graph API changelog also says \"Marketing API version auto-upgrade will be released on July 29, 2026.\" I found no page that explains why the two tables differ. If you run ads through the API, treat the Marketing API changelog as the page to watch, since it is the one dedicated to that API, and recheck it before each release. Under either table, v24.0 is the version closest to its end date. By the Graph API page's date it had already ended when I checked, and by the Marketing API page's date it ends on November 10, 2026.",[30,217,219],{"id":218},"what-happens-when-a-version-expires","What happens when a version expires",[14,221,222],{},"Here is what Meta's pages say, and nothing beyond it.",[14,224,225,228],{},[17,226,227],{},"Graph API."," The versioning guide says each version is guaranteed to operate for at least two years, and that a version is no longer usable two years after the next version is released. It then says: \"For APIs, once a version is no longer usable, any calls made to it will be defaulted to the next oldest, usable version.\" Meta also reserves the right to make changes in any API in a short period for security or privacy reasons.",[14,230,231,234],{},[17,232,233],{},"Marketing API."," The Marketing API versioning page says that when a new version releases, the previous one stays supported for at least 90 days. After that, \"the deprecated version stops working\", and calls to that version number \"may fail or be upgraded to the next available version.\" Since May 2024, Meta upgrades a call only when the endpoint is not affected between versions. Its worked example says that after v17.0 was deprecated on May 14, 2024, a POST to an ad set on v17.0 failed because that endpoint changed in v18.0, while a GET on ad account insights was upgraded to v18.0. It also says Marketing API versions are released approximately every four months.",[14,236,237,240],{},[17,238,239],{},"SDKs."," Meta says an SDK version always remains available because it is a downloadable package, but past its end-of-life date it \"may rely upon APIs or methods which no longer work\", so you should assume an end-of-life SDK is no longer functional.",[14,242,243,246],{},[17,244,245],{},"Which versions your app can call."," The versioning guide says your app can call an older version only if it is still available and your app has already made calls to that version. An app that made no calls until v2.2, in Meta's example, could not use v2.0 or v2.1. The Marketing API page has the same rule.",[14,248,249],{},"My advice: do not read \"defaulted to the next version\" as \"safe\". A newer version can rename a field or drop an endpoint, and an old call will then hit that change without any code release on your side.",[30,251,253],{"id":252},"how-to-find-which-version-your-app-calls","How to find which version your app calls",[14,255,256],{},"There are four places the version can come from.",[258,259,260,284,290,308],"ol",{},[261,262,263,266,267,271,272,275,276,279,280,283],"li",{},[17,264,265],{},"The request path."," Meta says to prepend the version to the path, for example ",[268,269,270],"code",{},"https:\u002F\u002Fgraph.facebook.com\u002Fv26.0\u002Fme",". Search your code, your backend and any tool that talks to ",[268,273,274],{},"graph.facebook.com"," for ",[268,277,278],{},"\u002Fv"," followed by a number. This is also how the Facebook Login dialog is versioned on the web (",[268,281,282],{},"https:\u002F\u002Fwww.facebook.com\u002Fv26.0\u002Fdialog\u002Foauth",").",[261,285,286,289],{},[17,287,288],{},"No version at all."," Meta calls this an unversioned call, and says it \"uses the version set in the app dashboard Upgrade API Version card under Settings > Advanced.\" Meta recommends always specifying the version. For the Marketing API, an unversioned call is invalid and fails. For the JavaScript SDK, Meta says you cannot make unversioned calls.",[261,291,292,295,296,299,300,303,304,307],{},[17,293,294],{},"The Facebook SDK for Android or iOS."," Meta says each SDK release is tied to the Graph API version available on its release date, so upgrading the SDK also upgrades the API version. You can override it for one request with ",[268,297,298],{},"GraphRequest.setVersion()"," on Android, or ",[268,301,302],{},"[FBSDKGraphRequest initWithGraphPath]"," and ",[268,305,306],{},"[FBSDKGraphRequestConnection overrideVersionPartWith]"," on iOS. Meta says the version is listed with each SDK release. In the changelogs I read, the iOS one says \"The default Graph API version is now v26.0\" under release 18.1.1, dated August 27, 2026. The Android changelog says nothing about a default version for its current 19.0.0 release, and I could not find the Android default on a page I fetched.",[261,309,310,313],{},[17,311,312],{},"The App Dashboard."," Meta's upgrade guide describes an API Upgrade Tool. You choose your app, a version to upgrade from and a version to upgrade to, and it lists the changes that affect your calls, with the number of calls in the last 7 days. Meta says the dates in the tool are when the changes are enforced for all apps, and that the data is sampled, so volumes may look off. It also says no data appears if the app made too few calls on the source version. The same page describes upgrading in Settings > Advanced, either for developers and admins only (a small test) or for all calls. Meta notes that upgrading early keeps the option of going back.",[30,315,317],{"id":316},"flutter-and-react-native-apps","Flutter and React Native apps",[14,319,320],{},"Meta's pages I fetched cover the native SDKs and the JavaScript SDK. They say nothing about Flutter or React Native plugins, and I did not read any plugin's documentation for this guide. What I can say from Meta's own wording:",[322,323,324,327,337],"ul",{},[261,325,326],{},"The Facebook SDK for Android and iOS set the default Graph API version per SDK release. A plugin that bundles the native SDKs gets whatever default the bundled release carries.",[261,328,329,330,303,333,336],{},"So the question is which native SDK version your build resolves. In a Flutter app that means reading ",[268,331,332],{},"android\u002Fapp\u002Fbuild.gradle",[268,334,335],{},"ios\u002FPodfile.lock"," after a clean install. In a React Native app it means the same two native files.",[261,338,339,340,342],{},"If your own code, or a server you control, calls ",[268,341,274],{}," directly, the version is whatever your path says, and the SDK is not involved.",[14,344,345,346,349],{},"The iOS 19.0.0 release, dated September 24, 2026 in the changelog, is one to read before you update. It lists a ",[17,347,348],{},"Breaking"," change: the minimum supported deployment target is now iOS 15.0, up from iOS 12.0, because \"Xcode 27 does not support deployment targets below iOS 15.0.\" Both the iOS and Android 19.0.0 notes also say that starting October 31, 2026, Screen Title and AppLink URL will be included with events logged by the SDK, and they say how to turn this off. The same release also adds sampled app information, such as screen layout, sent to Meta, which can be turned off. These are data changes, so they may belong in your privacy review.",[30,351,353],{"id":352},"a-short-plan","A short plan",[258,355,356,362,368,374,380,386],{},[261,357,358,361],{},[17,359,360],{},"List every place a version is chosen."," Request paths, SDK overrides, server code and the App Dashboard setting.",[261,363,364,367],{},[17,365,366],{},"Note the earliest end date."," For Graph API calls on v21.0, that is January 21, 2027. For Marketing API calls, use the Marketing API changelog.",[261,369,370,373],{},[17,371,372],{},"Run the API Upgrade Tool"," from your current version to v26.0 and read the list of changes against your own call list.",[261,375,376,379],{},[17,377,378],{},"Pin a version in code"," instead of relying on the dashboard default, so a dashboard change cannot move your app.",[261,381,382,385],{},[17,383,384],{},"Update the Facebook SDK in a release you can test",", not at the last minute. Check the deployment target and the new data-logging note first.",[261,387,388,391],{},[17,389,390],{},"Test on a real device,"," with a clean install and a fresh login, before you submit.",[14,393,394,395,400],{},"For every other dated Apple, Google Play and Firebase requirement in 2026 and 2027, see ",[396,397,399],"a",{"href":398},"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","App Store and Google Play deadlines for 2026 and 2027",".",[30,402,404],{"id":403},"need-a-hand","Need a hand?",[14,406,407,408,412,413,400],{},"If your Flutter app uses Facebook Login, app events or the Marketing API and you want the version problem sorted before an old version stops working, the ",[396,409,411],{"href":410},"\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 and comes as a pull request. Or ",[396,414,416],{"href":415},"\u002Fcontact\u002F","send me a short description",{"title":418,"searchDepth":419,"depth":419,"links":420},"",2,[421,425,426,427,428,429],{"id":32,"depth":419,"text":33,"children":422},[423],{"id":155,"depth":424,"text":156},3,{"id":218,"depth":419,"text":219},{"id":252,"depth":419,"text":253},{"id":316,"depth":419,"text":317},{"id":352,"depth":419,"text":353},{"id":403,"depth":419,"text":404},"AI & Technology","2026-10-19T21:00:00.000Z","The Graph API and Marketing API versions that stop working between now and the end of 2027, with the Available Until dates as Meta for Developers lists them, what happens to old calls, and what to check in an app that uses the Facebook SDK. Checked October 19, 2026.",null,"md",[436,439,442,445,448],{"question":437,"answer":438},"Which Graph API versions expire in 2027?","Meta's Graph API changelog lists v21.0 as available until January 21, 2027, v22.0 until May 20, 2027 and v23.0 until October 8, 2027. v24.0 is listed until February 18, 2028 and v25.0 until July 29, 2028, both outside 2027. v26.0 is the latest, with Available Until shown as TBD.",{"question":440,"answer":441},"Will my app break when its Graph API version expires?","Meta's versioning guide says that for APIs, once a version is no longer usable, any calls made to it will be defaulted to the next oldest, usable version. So a Graph API call is not described as failing outright, but it then runs against a newer version with whatever changed in between. Test against the newer version before the date instead of finding out in production.",{"question":443,"answer":444},"What happens to Marketing API calls on an expired version?","Meta's Marketing API versioning page says that after the grace period the deprecated version stops working, and calls to it may fail or be upgraded to the next available version. It says the upgrade happens only for endpoints the next version does not change. Its own example says a POST to an ad set on an expired v17.0 failed, while a GET on ad account insights was upgraded to v18.0.",{"question":446,"answer":447},"Does updating the Facebook SDK change which Graph API version I call?","Meta says each SDK release is tied to the Graph API version available when it shipped, so upgrading the SDK also upgrades the default API version. You can still pick an earlier available version in a request. The Facebook SDK for iOS changelog says the default Graph API version became v26.0 in release 18.1.1.",{"question":449,"answer":450},"Do the Flutter and React Native Facebook plugins matter here?","They matter indirectly. I did not read any plugin documentation for this guide, so I can't say what version a particular plugin sets. A plugin that wraps the native Facebook SDKs inherits the Graph API behavior of the native SDK release it bundles, so check which native SDK version your build resolves to.","Boynton Beach, FL",{"readingTimeStats":453},{"text":454,"minutes":455,"time":456,"words":457},"9 min read",8.01,480600,1602,true,"\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027","facebook graph api version expiry","8 min",[463,464,465],"app-store-google-play-deadlines-2026-2027","admob-google-mobile-ads-sdk-sunset-versions-2027","google-sign-in-android-deprecated-credential-manager-2026",{"title":5,"description":432},[468,471,474,477,480,483,486],{"title":469,"url":470},"Meta for Developers, Graph API Changelog","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fgraph-api\u002Fchangelog",{"title":472,"url":473},"Meta for Developers, Graph API Platform Versioning","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fgraph-api\u002Fguides\u002Fversioning",{"title":475,"url":476},"Meta for Developers, Upgrade to the Latest Graph API Version","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fgraph-api\u002Fguides\u002Fupgrading",{"title":478,"url":479},"Meta for Developers, Marketing API versioning","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Foverview\u002Fversioning",{"title":481,"url":482},"Meta for Developers, Marketing API Changelog","https:\u002F\u002Fdevelopers.facebook.com\u002Fdocs\u002Fmarketing-api\u002Fmarketing-api-changelog",{"title":484,"url":485},"GitHub, facebook-ios-sdk CHANGELOG","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Ffacebook-ios-sdk\u002Fblob\u002Fmain\u002FCHANGELOG.md",{"title":487,"url":488},"GitHub, facebook-android-sdk CHANGELOG","https:\u002F\u002Fgithub.com\u002Ffacebook\u002Ffacebook-android-sdk\u002Fblob\u002Fmain\u002FCHANGELOG.md","blog\u002Ffacebook-graph-api-version-expiry-dates-2027","facebook graph api version expiry, graph api v21 available until, graph api v22 available until, graph api v23 available until, marketing api v24 v25 expiry, graph api v26.0, facebook sdk android ios graph api version, facebook login flutter graph api version, react native fbsdk graph api version, graph api auto upgrade, graph api unversioned call, api upgrade tool",[492,493,494,495,496],"Meta's Graph API changelog lists three versions with an Available Until date between October 19, 2026 and the end of 2027: v21.0 on January 21, 2027, v22.0 on May 20, 2027 and v23.0 on October 8, 2027. The newest version is v26.0, introduced July 29, 2026, with Available Until shown as TBD.","The Marketing API runs on its own, shorter schedule, and two Meta pages disagree on it. The Graph API changelog shows v24.0 until October 6, 2026 and v25.0 as TBD. The Marketing API changelog shows v24.0 until November 10, 2026 and v25.0 until February 23, 2027. I could not reconcile them.","Meta's versioning guide says that once a Graph API version is no longer usable, calls made to it default to the next oldest, usable version. For the Marketing API it says calls to an unavailable version may fail or be upgraded, and calls to endpoints the next version changes fail.","Each Facebook SDK for iOS or Android release is tied to the Graph API version available on its release date, and Meta says you can override it per request. The iOS changelog says the default became v26.0 in release 18.1.1. The Android changelog I read states no default for its current release.","An app that never names a Graph API version uses the version set in the App Dashboard under Settings > Advanced. Meta says Marketing API calls with no version are invalid and fail.","https:\u002F\u002Fapp369.com\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027\u002F","Xhi8luaiWz2Rc7YSQ1MfHB_qHor5IWhmPGOqnGP9uTQ",[500,1619,2421],{"id":501,"title":502,"author":503,"body":505,"category":430,"createdAt":1545,"description":1546,"disclosure":433,"extension":434,"faq":1547,"howTo":433,"lastVerified":433,"location":451,"meta":1563,"navigation":458,"ogImage":433,"path":1569,"primaryKeyword":1570,"readingTime":1571,"related":1572,"seo":1576,"sources":1577,"stem":1608,"tags":1609,"takeaways":1610,"updatedAt":1616,"url":1617,"__hash__":1618},"blog\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027.md","App Store and Google Play Deadlines for 2026 and 2027",{"name":7,"social":504},{"twitter":9},{"type":11,"value":506,"toc":1537},[507,513,516,521,525,1443,1455,1458,1468,1471,1475,1492,1495,1499,1515,1518,1522,1528,1530],[14,508,509,512],{},[17,510,511],{},"The App Store and Google Play requirements that affect mobile app owners in 2026 and 2027 fit in one table: Xcode 26 uploads since April 28, 2026, target API 36 and Play Billing Library 8 since August 31, 2026, 16 KB page size support from February 1, 2027, and five Firebase shutdowns between March 22 and September 30, 2027."," The table below is sorted by date, and every row links to the page where the platform states it.",[14,514,515],{},"I checked each one again on October 19, 2026, against its linked source. Rows whose date has passed are marked \"In effect\".",[14,517,518,520],{},[17,519,27],{}," App369 is my studio. I build and fix Android and iOS apps, mostly in Flutter, and the last section mentions what I sell. Apple and Google don't pay me for anything on this page.",[30,522,524],{"id":523},"all-dates-in-order","All dates, in order",[38,526,527,546],{},[41,528,529],{},[44,530,531,534,537,540,543],{},[47,532,533],{},"Date",[47,535,536],{},"What changes",[47,538,539],{},"Status",[47,541,542],{},"Source",[47,544,545],{},"My guide",[57,547,548,576,599,625,649,671,694,724,749,776,801,827,852,874,900,926,950,974,998,1022,1046,1067,1091,1115,1140,1167,1193,1214,1234,1259,1284,1308,1331,1355,1378,1399,1423],{},[44,549,550,553,559,562,570],{},[62,551,552],{},"January 31, 2026",[62,554,555,558],{},[17,556,557],{},"Apple."," Apple asked developers to answer the updated age rating questions in App Store Connect by this date, to avoid an interruption when submitting app updates. Affects: every app on the App Store.",[62,560,561],{},"In effect",[62,563,564],{},[396,565,569],{"href":566,"rel":567},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Fupcoming-requirements\u002F",[568],"nofollow","Apple",[62,571,572],{},[396,573,575],{"href":574},"\u002Fblog\u002Fapp-store-age-rating-questions-update-2026\u002F","Age rating questions",[44,577,578,581,586,588,593],{},[62,579,580],{},"April 28, 2026",[62,582,583,585],{},[17,584,557],{}," Uploads to App Store Connect must be built with Xcode 26 or later, using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. Affects: anyone uploading a build, including Flutter apps.",[62,587,561],{},[62,589,590],{},[396,591,569],{"href":566,"rel":592},[568],[62,594,595],{},[396,596,598],{"href":597},"\u002Fblog\u002Fitms-90725-sdk-version-issue-xcode-26-flutter-2026\u002F","ITMS-90725 and Xcode 26",[44,600,601,604,610,612,619],{},[62,602,603],{},"August 31, 2026",[62,605,606,609],{},[17,607,608],{},"Google Play."," New apps and app updates must target Android 16 (API level 36) or higher. Wear OS and Android Automotive OS apps need API 35, and Android XR apps need API 34. Affects: anyone publishing a new app or an update.",[62,611,561],{},[62,613,614],{},[396,615,618],{"href":616,"rel":617},"https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Fanswer\u002F11926878",[568],"Play Console Help",[62,620,621],{},[396,622,624],{"href":623},"\u002Fblog\u002Fgoogle-play-target-api-36-android-16-requirement-2026\u002F","Target API 36",[44,626,627,629,634,636,643],{},[62,628,603],{},[62,630,631,633],{},[17,632,608],{}," New apps and updates must use Play Billing Library 8 or later. Version 7 is no longer accepted by default. Affects: apps with in-app purchases or subscriptions.",[62,635,561],{},[62,637,638],{},[396,639,642],{"href":640,"rel":641},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Fbilling\u002Fdeprecation-faq",[568],"Android Developers",[62,644,645],{},[396,646,648],{"href":647},"\u002Fblog\u002Fplay-billing-library-7-deprecated-update-to-8-2026\u002F","Billing Library 8",[44,650,651,654,659,661,667],{},[62,652,653],{},"September 2026",[62,655,656,658],{},[17,657,557],{}," Answers to the new social media questions in the age rating questionnaire are required when submitting new apps or updates, or apps for notarization for alternative distribution. Apple gives the month, not a day. Affects: every app on the App Store.",[62,660,561],{},[62,662,663],{},[396,664,569],{"href":665,"rel":666},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=tlur8uvi",[568],[62,668,669],{},[396,670,575],{"href":574},[44,672,673,676,681,683,688],{},[62,674,675],{},"September 9, 2026",[62,677,678,680],{},[17,679,557],{}," iOS and iPadOS apps uploaded to App Store Connect must target iOS 13 or later. Affects: anyone uploading an iOS or iPadOS build.",[62,682,561],{},[62,684,685],{},[396,686,569],{"href":566,"rel":687},[568],[62,689,690],{},[396,691,693],{"href":692},"\u002Fblog\u002Fios-27-sdk-requirement-april-2027-xcode-27-flutter\u002F","iOS 27 SDK checklist",[44,695,696,699,704,706,718],{},[62,697,698],{},"September 14, 2026",[62,700,701,703],{},[17,702,557],{}," Xcode 27 was released. Flutter's docs say Apple mandates the UIScene life cycle for UIKit apps built with the iOS 27 SDK, and that Flutter apps built with Xcode 27 without it fail to launch. Affects: anyone building with Xcode 27, including Flutter apps with a custom AppDelegate.",[62,705,561],{},[62,707,708,713,714],{},[396,709,712],{"href":710,"rel":711},"https:\u002F\u002Fdocs.flutter.dev\u002Frelease\u002Fbreaking-changes\u002Fuiscenedelegate",[568],"Flutter docs",", ",[396,715,569],{"href":716,"rel":717},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002Freleases\u002F",[568],[62,719,720],{},[396,721,723],{"href":722},"\u002Fblog\u002Fflutter-uiscene-migration-xcode-27-app-wont-launch-2026\u002F","UIScene migration",[44,725,726,729,735,737,743],{},[62,727,728],{},"September 30, 2026",[62,730,731,734],{},[17,732,733],{},"Google Play \u002F Android."," Developer verification protections begin for apps installed from participating stores in Brazil, Indonesia, Singapore and Thailand on certified devices running Android 7 or higher. Affects: anyone distributing Android apps.",[62,736,561],{},[62,738,739],{},[396,740,642],{"href":741,"rel":742},"https:\u002F\u002Fdeveloper.android.com\u002Fdeveloper-verification",[568],[62,744,745],{},[396,746,748],{"href":747},"\u002Fblog\u002Fandroid-developer-verification-requirement-2026\u002F","Developer verification",[44,750,751,754,760,763,770],{},[62,752,753],{},"October 30, 2026",[62,755,756,759],{},[17,757,758],{},"Google APIs."," Google says the legacy Fitbit Web API will be turned off and will no longer function or sync data. Support already ended on September 30, 2026. Affects: apps that read Fitbit data through the Fitbit Web API.",[62,761,762],{},"Upcoming",[62,764,765],{},[396,766,769],{"href":767,"rel":768},"https:\u002F\u002Fdevelopers.google.com\u002Fhealth",[568],"Google Health API",[62,771,772],{},[396,773,775],{"href":774},"\u002Fblog\u002Fgoogle-fit-api-deprecated-health-connect-2026\u002F","Google Fit to Health Connect",[44,777,778,780,786,788,795],{},[62,779,753],{},[62,781,782,785],{},[17,783,784],{},"Supabase."," New tables in the public schema stop getting automatic Data API access in existing projects, so they need an explicit grant. Affects: apps with a Supabase backend.",[62,787,762],{},[62,789,790],{},[396,791,794],{"href":792,"rel":793},"https:\u002F\u002Fsupabase.com\u002Fchangelog\u002F45329-breaking-change-tables-not-exposed-to-data-and-graphql-api-automatically",[568],"Supabase",[62,796,797],{},[396,798,800],{"href":799},"\u002Fblog\u002Fsupabase-permission-denied-new-tables-october-30-2026\u002F","Supabase permission denied",[44,802,803,806,811,813,821],{},[62,804,805],{},"November 1, 2026",[62,807,808,810],{},[17,809,608],{}," End of the extension Google offers for the target API 36 and Billing Library 7 deadlines. Affects: anyone who requested an extension.",[62,812,762],{},[62,814,815,713,818],{},[396,816,618],{"href":616,"rel":817},[568],[396,819,642],{"href":640,"rel":820},[568],[62,822,823,713,825],{},[396,824,624],{"href":623},[396,826,648],{"href":647},[44,828,829,832,837,839,846],{},[62,830,831],{},"Later in 2026 (no date given)",[62,833,834,836],{},[17,835,557],{}," New Sign in with Apple relay addresses are issued on private.icloud.com instead of privaterelay.appleid.com. Existing relay addresses keep working. Affects: apps and backends that validate, allowlist or filter users' email by domain.",[62,838,762],{},[62,840,841],{},[396,842,845],{"href":843,"rel":844},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=1ptvdtcm",[568],"Apple Developer News",[62,847,848],{},[396,849,851],{"href":850},"\u002Fblog\u002Fsign-in-with-apple-private-icloud-com-relay-domain-2026\u002F","Sign in with Apple relay domain",[44,853,854,857,862,864,870],{},[62,855,856],{},"End of 2026",[62,858,859,861],{},[17,860,758],{}," The Google Fit APIs, including the REST API, are supported only until the end of 2026. Affects: apps that read fitness data through Google Fit.",[62,863,762],{},[62,865,866],{},[396,867,642],{"href":868,"rel":869},"https:\u002F\u002Fdeveloper.android.com\u002Fhealth-and-fitness\u002Fhealth-connect\u002Fmigration\u002Ffit",[568],[62,871,872],{},[396,873,775],{"href":774},[44,875,876,879,885,887,894],{},[62,877,878],{},"January 1, 2027",[62,880,881,884],{},[17,882,883],{},"Firebase."," New users can no longer start using the FCM InstanceId server APIs and device groups. Firebase says new users can onboard before this date. Affects: new integrations that use those APIs.",[62,886,762],{},[62,888,889],{},[396,890,893],{"href":891,"rel":892},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fcloud-messaging\u002Ftroubleshooting",[568],"Firebase",[62,895,896],{},[396,897,899],{"href":898},"\u002Fblog\u002Ffcm-legacy-api-shutdown-http-v1-migration-2026\u002F","FCM migration",[44,901,902,905,911,913,920],{},[62,903,904],{},"As early as January 2027",[62,906,907,910],{},[17,908,909],{},"Google Play services."," Google says it will stop supporting the Awareness API in a future release, as early as January 2027, and that there is no direct replacement. Affects: Android apps that use Awareness fences or snapshots (time, location, activity, headphones, beacons).",[62,912,762],{},[62,914,915],{},[396,916,919],{"href":917,"rel":918},"https:\u002F\u002Fdevelopers.google.com\u002Fawareness\u002Foverview",[568],"Google for Developers",[62,921,922],{},[396,923,925],{"href":924},"\u002Fblog\u002Fgoogle-awareness-api-deprecated-2027-alternatives\u002F","Awareness API alternatives",[44,927,928,931,936,938,944],{},[62,929,930],{},"Early 2027",[62,932,933,935],{},[17,934,557],{}," Existing apps in the EEA, UK or US whose category is Health & Fitness or Medical, or that are marked in the age rating questionnaire as containing frequent Medical or Treatment Information, must declare a regulated medical device status in App Store Connect. Without it, you can no longer submit app updates. New apps have needed it since March 26, 2026. Apple gives no exact date. Affects: health, fitness and medical apps.",[62,937,762],{},[62,939,940],{},[396,941,569],{"href":942,"rel":943},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=nyqbfz1y",[568],[62,945,946],{},[396,947,949],{"href":948},"\u002Fblog\u002Fapp-store-medical-device-status-declaration-2027\u002F","Medical device status",[44,951,952,954,960,962,968],{},[62,953,137],{},[62,955,956,959],{},[17,957,958],{},"Meta."," Graph API v21.0 reaches its Available Until date in Meta's changelog. Meta's versioning guide says calls to an unusable version are defaulted to the next oldest usable version. Affects: apps and backends that call the Graph API or use the Facebook SDK pinned to v21.0.",[62,961,762],{},[62,963,964],{},[396,965,967],{"href":470,"rel":966},[568],"Meta for Developers",[62,969,970],{},[396,971,973],{"href":972},"\u002Fblog\u002Ffacebook-graph-api-version-expiry-dates-2027\u002F","Graph API version dates",[44,975,976,979,984,986,992],{},[62,977,978],{},"January 27, 2027",[62,980,981,983],{},[17,982,608],{}," Four sensitive-permission changes take effect: the Contacts Permissions policy (use the Android Contact Picker unless the app needs broad access), the location button as the recommended minimum scope for precise location used only for one-time, user-initiated actions, no READ_CALL_LOG for phone-call account verification, and no geofencing as a foreground service use case. Google's Help Center articles tie the contacts and location rules to apps that target Android 17 (API level 37) or later; its call log and geofencing pages give no target API. The contacts and location articles say a 30-day self extension will be available in Play Console. Affects: apps that request READ_CONTACTS, ACCESS_FINE_LOCATION or READ_CALL_LOG, or run geofencing in a foreground service.",[62,985,762],{},[62,987,988],{},[396,989,618],{"href":990,"rel":991},"https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Ftable\u002F12921780",[568],[62,993,994],{},[396,995,997],{"href":996},"\u002Fblog\u002Fgoogle-play-contacts-permissions-policy-2027\u002F","Play permission changes",[44,999,1000,1003,1008,1010,1016],{},[62,1001,1002],{},"February 1, 2027",[62,1004,1005,1007],{},[17,1006,608],{}," Updates that don't support 16 KB memory page sizes can't be released, for apps targeting Android 15 (API level 35) and higher. Affects: apps with native code, which includes Flutter apps.",[62,1009,762],{},[62,1011,1012],{},[396,1013,642],{"href":1014,"rel":1015},"https:\u002F\u002Fdeveloper.android.com\u002Fguide\u002Fpractices\u002Fpage-sizes",[568],[62,1017,1018],{},[396,1019,1021],{"href":1020},"\u002Fblog\u002Fgoogle-play-16kb-page-size-flutter-android-2026\u002F","16 KB page size",[44,1023,1024,1027,1032,1034,1040],{},[62,1025,1026],{},"February 2027 (no day given)",[62,1028,1029,1031],{},[17,1030,608],{}," New technical quality thresholds apply: memory (90th percentile by device RAM and app state), bitmap memory, and at least 25% DEX optimization, obfuscation and shrinking for apps over 10 MB of DEX (games over 50 MB). Google says missing them can affect an app's visibility and publishing capabilities. Affects: all Android apps.",[62,1033,762],{},[62,1035,1036],{},[396,1037,618],{"href":1038,"rel":1039},"https:\u002F\u002Fsupport.google.com\u002Fgoogleplay\u002Fandroid-developer\u002Fanswer\u002F17492799",[568],[62,1041,1042],{},[396,1043,1045],{"href":1044},"\u002Fblog\u002Fgoogle-play-memory-dex-zero-tap-sign-in-requirements-2027\u002F","Play quality rules",[44,1047,1048,1051,1056,1058,1063],{},[62,1049,1050],{},"2027 (no month stated)",[62,1052,1053,1055],{},[17,1054,733],{}," Developer verification capability expands globally for all apps on certified Android devices. Affects: anyone distributing Android apps.",[62,1057,762],{},[62,1059,1060],{},[396,1061,642],{"href":741,"rel":1062},[568],[62,1064,1065],{},[396,1066,748],{"href":747},[44,1068,1069,1072,1077,1079,1085],{},[62,1070,1071],{},"March 22, 2027",[62,1073,1074,1076],{},[17,1075,883],{}," Firebase Studio shuts down and remaining data is permanently deleted. Affects: anyone with a Firebase Studio workspace.",[62,1078,762],{},[62,1080,1081],{},[396,1082,893],{"href":1083,"rel":1084},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fstudio\u002Fmigrating-project",[568],[62,1086,1087],{},[396,1088,1090],{"href":1089},"\u002Fblog\u002Ffirebase-studio-shutting-down-migrate-project-2027\u002F","Firebase Studio shutdown",[44,1092,1093,1096,1101,1103,1109],{},[62,1094,1095],{},"March 31, 2027",[62,1097,1098,1100],{},[17,1099,883],{}," Firebase Extensions service shuts down. Installed extensions keep running, but you lose the ability to update, reconfigure or uninstall them through the console or CLI. Affects: apps with installed extensions.",[62,1102,762],{},[62,1104,1105],{},[396,1106,893],{"href":1107,"rel":1108},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fextensions\u002Ffaq-and-troubleshooting",[568],[62,1110,1111],{},[396,1112,1114],{"href":1113},"\u002Fblog\u002Ffirebase-extensions-shutting-down-replace-2027\u002F","Firebase Extensions shutdown",[44,1116,1117,1120,1125,1127,1133],{},[62,1118,1119],{},"April 2027",[62,1121,1122,1124],{},[17,1123,557],{}," Apps uploaded to App Store Connect must be built with the iOS 27 and iPadOS 27 SDK or later (tvOS, visionOS and watchOS 27 SDKs for those platforms). Apple gives the month, not a day. Affects: every iOS and Flutter app that ships an update.",[62,1126,762],{},[62,1128,1129],{},[396,1130,569],{"href":1131,"rel":1132},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=k1mtkt1k",[568],[62,1134,1135,713,1137],{},[396,1136,693],{"href":692},[396,1138,1139],{"href":722},"UIScene and Xcode 27",[44,1141,1142,1144,1149,1151,1163],{},[62,1143,1119],{},[62,1145,1146,1148],{},[17,1147,557],{}," Apple's news post says any app or game submitted must include screenshots for iPhone Duo. Its screenshot specifications page says they will be required for any app using the iOS 27.1 SDK or later. Apple gives the month, not a day. Affects: App Store submissions.",[62,1150,762],{},[62,1152,1153,713,1158],{},[396,1154,1157],{"href":1155,"rel":1156},"https:\u002F\u002Fdeveloper.apple.com\u002Fnews\u002F?id=kkphp5qo",[568],"Apple news",[396,1159,1162],{"href":1160,"rel":1161},"https:\u002F\u002Fdeveloper.apple.com\u002Fhelp\u002Fapp-store-connect\u002Freference\u002Fapp-information\u002Fscreenshot-specifications",[568],"Apple specs",[62,1164,1165],{},[396,1166,693],{"href":692},[44,1168,1169,1171,1181,1183,1189],{},[62,1170,1119],{},[62,1172,1173,1175,1176,1180],{},[17,1174,557],{}," Apple's submitting page says iOS and iPadOS apps uploaded to App Store Connect must target iOS 15 or later. Apple's ",[396,1177,1179],{"href":566,"rel":1178},[568],"upcoming requirements page"," still lists iOS 13 as the minimum since September 9, 2026. Apple gives the month, not a day. Affects: apps whose deployment target is iOS 13 or 14.",[62,1182,762],{},[62,1184,1185],{},[396,1186,569],{"href":1187,"rel":1188},"https:\u002F\u002Fdeveloper.apple.com\u002Fapp-store\u002Fsubmitting\u002F",[568],[62,1190,1191],{},[396,1192,693],{"href":692},[44,1194,1195,1198,1203,1205,1210],{},[62,1196,1197],{},"April 2027 (no day given)",[62,1199,1200,1202],{},[17,1201,608],{}," Apps that support user sign-in must support zero-tap sign-in restoration through the Restore Credentials API, with exemptions Google lists (including games). Affects: Android apps with sign-in.",[62,1204,762],{},[62,1206,1207],{},[396,1208,618],{"href":1038,"rel":1209},[568],[62,1211,1212],{},[396,1213,1045],{"href":1044},[44,1215,1216,1218,1223,1225,1230],{},[62,1217,122],{},[62,1219,1220,1222],{},[17,1221,958],{}," Graph API v22.0 reaches its Available Until date in Meta's changelog. Meta's versioning guide says calls to an unusable version are defaulted to the next oldest usable version. Affects: apps and backends that call the Graph API or use the Facebook SDK pinned to v22.0.",[62,1224,762],{},[62,1226,1227],{},[396,1228,967],{"href":470,"rel":1229},[568],[62,1231,1232],{},[396,1233,973],{"href":972},[44,1235,1236,1239,1245,1247,1253],{},[62,1237,1238],{},"May 2027 (no day given)",[62,1240,1241,1244],{},[17,1242,1243],{},"Google Play Games Services."," Google's deprecation table says all traffic from Play Games Services v1 is blocked and existing v1 APIs stop working in production; a bullet on the same page says the v1 SDK is removed from June 2027. Affects: Android games and apps that still use Play Games Services v1 features such as sign-in, leaderboards or achievements.",[62,1246,762],{},[62,1248,1249],{},[396,1250,642],{"href":1251,"rel":1252},"https:\u002F\u002Fdeveloper.android.com\u002Fgames\u002Fpgs\u002Fdeprecation",[568],[62,1254,1255],{},[396,1256,1258],{"href":1257},"\u002Fblog\u002Fplay-games-services-v1-shutdown-migrate-to-v2-2027\u002F","Play Games Services v1 shutdown",[44,1260,1261,1264,1270,1272,1278],{},[62,1262,1263],{},"Q2 2027 (no day given)",[62,1265,1266,1269],{},[17,1267,1268],{},"Google Mobile Ads (iOS)."," Version 11.x of the Google Mobile Ads SDK for iOS is sunset. Google says it will give the exact date with two months' notice. After sunset, ad requests return a no fill with an error. Affects: iOS and Flutter apps that serve AdMob or Ad Manager ads on v11.",[62,1271,762],{},[62,1273,1274],{},[396,1275,919],{"href":1276,"rel":1277},"https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fdeprecation",[568],[62,1279,1280],{},[396,1281,1283],{"href":1282},"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F","AdMob SDK sunset dates",[44,1285,1286,1289,1294,1296,1302],{},[62,1287,1288],{},"June 15, 2027",[62,1290,1291,1293],{},[17,1292,883],{}," Firebase ML custom model hosting shuts down. Affects: apps that host custom models in Firebase ML.",[62,1295,762],{},[62,1297,1298],{},[396,1299,893],{"href":1300,"rel":1301},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fml\u002Fmigrate-to-cloud-storage",[568],[62,1303,1304],{},[396,1305,1307],{"href":1306},"\u002Fblog\u002Ffirebase-ml-model-hosting-shutting-down-migrate-2027\u002F","Firebase ML model hosting shutdown",[44,1309,1310,1313,1319,1321,1327],{},[62,1311,1312],{},"June 30, 2027",[62,1314,1315,1318],{},[17,1316,1317],{},"Google Mobile Ads (Android)."," Version 23.x of the Google Mobile Ads SDK for Android is sunset, so ad requests from it stop filling. Affects: Android and Flutter apps that serve AdMob or Ad Manager ads on v23.",[62,1320,762],{},[62,1322,1323],{},[396,1324,919],{"href":1325,"rel":1326},"https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fdeprecation",[568],[62,1328,1329],{},[396,1330,1283],{"href":1282},[44,1332,1333,1336,1341,1343,1350],{},[62,1334,1335],{},"August 2027 (no day given)",[62,1337,1338,1340],{},[17,1339,733],{}," Google's Android 17 post says new apps and updates on Google Play will be required to target API level 37. For apps targeting API 37, orientation, resizability and aspect ratio restrictions are ignored on screens whose smallest width is 600dp or more, and the temporary opt-out from Android 16 is removed. Games are exempt. Affects: apps that lock portrait or set resizeableActivity=false.",[62,1342,762],{},[62,1344,1345],{},[396,1346,1349],{"href":1347,"rel":1348},"https:\u002F\u002Fdeveloper.android.com\u002Fblog\u002Fposts\u002Fprepare-your-app-for-the-resizability-and-orientation-changes-in-android-17",[568],"Android Developers Blog",[62,1351,1352],{},[396,1353,1354],{"href":623},"Target API 36 guide",[44,1356,1357,1360,1365,1367,1372],{},[62,1358,1359],{},"August 31, 2027",[62,1361,1362,1364],{},[17,1363,608],{}," Billing Library 8 reaches its own deadline. New apps and updates must use Billing Library 9 or later. Extension available until November 1, 2027. Affects: apps with in-app purchases or subscriptions.",[62,1366,762],{},[62,1368,1369],{},[396,1370,642],{"href":640,"rel":1371},[568],[62,1373,1374],{},[396,1375,1377],{"href":1376},"\u002Fblog\u002Fplay-billing-library-9-migration-deadline-2027\u002F","Billing Library 9",[44,1379,1380,1383,1388,1390,1395],{},[62,1381,1382],{},"September 29, 2027",[62,1384,1385,1387],{},[17,1386,883],{}," The FCM InstanceId server APIs and device groups are decommissioned. Affects: servers that manage topics or tokens through the old APIs.",[62,1389,762],{},[62,1391,1392],{},[396,1393,893],{"href":891,"rel":1394},[568],[62,1396,1397],{},[396,1398,899],{"href":898},[44,1400,1401,1404,1409,1411,1417],{},[62,1402,1403],{},"September 30, 2027",[62,1405,1406,1408],{},[17,1407,883],{}," Firebase Test Lab is fully shut down. Affects: CI pipelines that run tests on Test Lab.",[62,1410,762],{},[62,1412,1413],{},[396,1414,893],{"href":1415,"rel":1416},"https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Ftest-lab",[568],[62,1418,1419],{},[396,1420,1422],{"href":1421},"\u002Fblog\u002Ffirebase-test-lab-shutting-down-alternatives-2027\u002F","Firebase Test Lab shutdown",[44,1424,1425,1427,1432,1434,1439],{},[62,1426,107],{},[62,1428,1429,1431],{},[17,1430,958],{}," Graph API v23.0 reaches its Available Until date in Meta's changelog. Meta's versioning guide says calls to an unusable version are defaulted to the next oldest usable version. Affects: apps and backends that call the Graph API or use the Facebook SDK pinned to v23.0.",[62,1433,762],{},[62,1435,1436],{},[396,1437,967],{"href":470,"rel":1438},[568],[62,1440,1441],{},[396,1442,973],{"href":972},[14,1444,1445,1446,1450,1451,1454],{},"Two more notes. Apple's privacy manifest rules (May 1, 2024 for required reason APIs and February 12, 2025 for common SDKs, see the ",[396,1447,1449],{"href":1448},"\u002Fblog\u002Fapple-privacy-manifest-itms-91053-itms-91061-flutter-fix-2026\u002F","privacy manifest guide",") and the FCM legacy send shutdown (July 22, 2024, see the ",[396,1452,1453],{"href":898},"FCM migration guide",") already passed before 2026. I keep them in their own guides because they still cause upload and delivery errors.",[30,1456,569],{"id":1457},"apple",[14,1459,1460,1461,713,1463,303,1465,400],{},"Apple's page names one build rule that matters most: Xcode 26 or later since April 28, 2026. Apple's September 9, 2026 news post adds the next one: starting April 2027, uploads must be built with the iOS 27 and iPadOS 27 SDK or later, which means Xcode 27. Apple's October 5, 2026 post also says that from April 2027 every submission needs iPhone Duo screenshots. The bigger change with Xcode 27 is the UIScene life cycle, which a Flutter app on 3.41 or later with an unmodified AppDelegate gets automatically. A custom AppDelegate needs manual changes. The guides are ",[396,1462,598],{"href":597},[396,1464,1139],{"href":722},[396,1466,1467],{"href":1448},"privacy manifest errors",[14,1469,1470],{},"My advice: check which Xcode your build machine uses before your next upload, and test a build with Xcode 27 before you need one.",[30,1472,1474],{"id":1473},"google-play-and-android","Google Play and Android",[14,1476,1477,1478,1481,1482,713,1485,713,1487,303,1489,400],{},"The Play rules come in pairs. Target API 36 and Billing Library 8 both took effect on August 31, 2026 with an extension to November 1, 2026. After that, February 1, 2027 brings the 16 KB page size rule, and on August 31, 2027 Google requires Billing Library 9 or later for new apps and updates. The ",[396,1479,1480],{"href":1376},"Billing Library 9 guide"," covers that move. Separately, Android developer verification started on September 30, 2026 in four countries, with a global expansion in 2027. The guides are ",[396,1483,1484],{"href":623},"target API 36",[396,1486,1021],{"href":1020},[396,1488,648],{"href":647},[396,1490,1491],{"href":747},"developer verification",[14,1493,1494],{},"My advice: if you are still behind on API 36 or Billing 8, ship that update before November 1, 2026. Then do the 16 KB check before February 1, 2027, since it is the next date that can block a release.",[30,1496,1498],{"id":1497},"firebase-and-google-apis","Firebase and Google APIs",[14,1500,1501,1502,713,1506,713,1509,1511,1512,400],{},"Firebase has five shutdown dates in 2027, plus the January 1 cutoff for new users of the InstanceId APIs. Firestore, Authentication, Cloud Functions and Hosting are not on the list. Google Fit APIs are supported only until the end of 2026, and Google points to Health Connect and the Google Health API. The legacy Fitbit Web API goes first: Google says it will be turned off on October 30, 2026. The guides are ",[396,1503,1505],{"href":1504},"\u002Fblog\u002Ffirebase-deprecations-shutdown-dates-2026\u002F","Firebase shutdown dates",[396,1507,1508],{"href":898},"FCM HTTP v1 migration",[396,1510,775],{"href":774}," and, if you use it, ",[396,1513,1514],{"href":799},"Supabase new table permissions",[14,1516,1517],{},"My advice: open the Firebase console for every project you own and look at Extensions, Machine Learning, Test Lab and Studio. Those are the products with a date attached.",[30,1519,1521],{"id":1520},"how-i-keep-this-page-current","How I keep this page current",[14,1523,1524,1525,400],{},"Every row links to the page where the platform states the date. If a source says only a month or \"later this year\", I write exactly that. When a platform moves a date, I change the row and the updated date at the top of this page. If you spot a date that looks wrong, ",[396,1526,1527],{"href":415},"tell me",[30,1529,404],{"id":403},[14,1531,1532,1533,412,1535,400],{},"If one of these deadlines lands on an app you can't update yourself, the ",[396,1534,411],{"href":410},[396,1536,416],{"href":415},{"title":418,"searchDepth":419,"depth":419,"links":1538},[1539,1540,1541,1542,1543,1544],{"id":523,"depth":419,"text":524},{"id":1457,"depth":419,"text":569},{"id":1473,"depth":419,"text":1474},{"id":1497,"depth":419,"text":1498},{"id":1520,"depth":419,"text":1521},{"id":403,"depth":419,"text":404},"2026-10-18T22:00:00.000Z","One dated table of the App Store, Google Play, Firebase and Google API requirements that affect mobile app owners in 2026 and 2027, with the primary source for each date, checked October 19, 2026.",[1548,1551,1554,1557,1560],{"question":1549,"answer":1550},"What is the next Google Play deadline?","The deadline of November 1, 2026 is the end of the extension window for the target API 36 and Billing Library 7 deadlines. After that, the next one is February 1, 2027, when Google says app updates that don't support 16 KB memory page sizes can't be released.",{"question":1552,"answer":1553},"What Xcode version does the App Store require?","Apple's upcoming requirements page says that since April 28, 2026, apps uploaded to App Store Connect must be built with Xcode 26 or later using an SDK for iOS 26, iPadOS 26, tvOS 26, visionOS 26 or watchOS 26. Apple's September 9, 2026 news post adds the next one: starting April 2027, iOS and iPadOS apps must be built with the iOS 27 and iPadOS 27 SDK or later. Apple gives the month, not a day.",{"question":1555,"answer":1556},"Do these deadlines apply to apps already published?","It depends on the rule. Google says existing apps must target API 35 or higher to stay available to new users on newer Android versions, and existing apps keep working on version 7 of Play Billing until you ship an update. Most upload-side rules, such as the Xcode SDK minimum, apply when you submit a new build.",{"question":1558,"answer":1559},"Which deadlines affect a Flutter app?","Nearly all of the Apple and Google Play rows do, because a Flutter app is a normal iOS and Android app underneath. The Firebase rows apply only if you use that Firebase product. The Supabase row applies only if you use Supabase.",{"question":1561,"answer":1562},"How will I know if a date changes?","Each row links to the page where the platform states the date, and I list the date I checked it. Dates can move, so check the linked page before you plan around one. I update this page when a platform changes a date.",{"readingTimeStats":1564},{"text":1565,"minutes":1566,"time":1567,"words":1568},"12 min read",11.98,718800,2396,"\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027","app store deadlines 2026","6 min",[1573,1574,1575],"google-play-target-api-36-android-16-requirement-2026","itms-90725-sdk-version-issue-xcode-26-flutter-2026","firebase-deprecations-shutdown-dates-2026",{"title":502,"description":1546},[1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606],{"title":1579,"url":767},"Google for Developers, Google Health API (Fitbit Web API dates)",{"title":1581,"url":566},"Apple Developer, Upcoming requirements",{"title":1583,"url":716},"Apple Developer, Releases",{"title":1585,"url":710},"Flutter docs, Migrate to UIScene life cycle",{"title":1587,"url":616},"Play Console Help, Target API level requirements for Google Play apps",{"title":1589,"url":640},"Android Developers, Play Billing Library deprecation FAQ",{"title":1591,"url":1014},"Android Developers, Support 16 KB page sizes",{"title":1593,"url":741},"Android Developers, Android developer verification",{"title":1595,"url":868},"Android Developers, Migrate from the Google Fit APIs",{"title":1597,"url":891},"Firebase, FCM troubleshooting (InstanceId and device groups deprecation)",{"title":1599,"url":1083},"Firebase, Migrate from Firebase Studio",{"title":1601,"url":1107},"Firebase, Extensions FAQ and troubleshooting",{"title":1603,"url":1300},"Firebase, Migrate Firebase ML model hosting to Cloud Storage",{"title":1605,"url":1415},"Firebase, Test Lab",{"title":1607,"url":792},"Supabase changelog, Tables not exposed to the Data API automatically","blog\u002Fapp-store-google-play-deadlines-2026-2027","app store deadlines 2026, google play deadlines 2026, app store requirements 2027, google play requirements 2027, target api 36 deadline, play billing library 8 deadline, 16 kb page size deadline, xcode 26 requirement, firebase shutdown dates, mobile app compliance calendar",[1611,1612,1613,1614,1615],"Most 2026 deadlines have already hit. Since April 28, 2026 iOS uploads need Xcode 26 or later, and since August 31, 2026 Google Play needs new apps and updates to target API 36 and use Play Billing Library 8.","Google lets you request an extension for both Play deadlines until November 1, 2026. That is the last date to ship an update if you are still behind.","The next hard date for Android is February 1, 2027. Google says updates that don't support 16 KB memory page sizes can't be released after that.","On iOS, apps built with Xcode 27 must use the UIScene life cycle or they fail to launch. Xcode 27 was released on September 14, 2026.","Firebase has five shutdowns between March 22 and September 30, 2027. Core services such as Firestore and Authentication are not on the list.","2026-10-19T23:30:00.000Z","https:\u002F\u002Fapp369.com\u002Fblog\u002Fapp-store-google-play-deadlines-2026-2027\u002F","V5l0Ag18LgHfyYsBS7lQKum3FlsBAxt-eMxNZeYAG00",{"id":1620,"title":1621,"author":1622,"body":1624,"category":430,"createdAt":2351,"description":2352,"disclosure":433,"extension":434,"faq":2353,"howTo":433,"lastVerified":433,"location":451,"meta":2369,"navigation":458,"ogImage":433,"path":2375,"primaryKeyword":2376,"readingTime":2377,"related":2378,"seo":2381,"sources":2382,"stem":2411,"tags":2412,"takeaways":2413,"updatedAt":2351,"url":2419,"__hash__":2420},"blog\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027.md","Google Mobile Ads SDK Sunset Dates and Versions 2027",{"name":7,"social":1623},{"twitter":9},{"type":11,"value":1625,"toc":2342},[1626,1632,1635,1640,1642,1645,1876,1887,1890,1916,1920,1923,1943,1946,1949,1953,1956,1977,1995,2016,2034,2047,2051,2054,2170,2173,2184,2195,2198,2202,2205,2275,2278,2281,2283,2329,2333,2335],[14,1627,1628,1631],{},[17,1629,1630],{},"Google's Mobile Ads SDK timetables list the following sunset dates: on Android, v23.x.x on June 30, 2027 and v24.x.x and v25.x.x on June 30, 2028; on iOS, v11.x.x in Q2 2027, v12.x.x in Q2 2028 and v13.x.x in Q2 2029."," The iOS dates are quarters only, and Google says a more specific v11 date will come with two months' notice. At sunset, Google says ad requests return a no fill with an error saying the version is sunset, so the app keeps running but earns nothing from that placement. If you ship AdMob in a native or Flutter app, find your SDK version now and update well before the date.",[14,1633,1634],{},"I checked Google's pages on October 19, 2026. Both deprecation pages show \"Last updated 2026-10-16 UTC\". Google can change a date, so open the linked page before you plan around it.",[14,1636,1637,1639],{},[17,1638,27],{}," 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.",[30,1641,33],{"id":32},[14,1643,1644],{},"These are the rows exactly as Google's timetables state them, with the status column as shown on October 19, 2026.",[38,1646,1647,1664],{},[41,1648,1649],{},[44,1650,1651,1654,1656,1658,1661],{},[47,1652,1653],{},"Platform",[47,1655,49],{},[47,1657,539],{},[47,1659,1660],{},"Deprecation",[47,1662,1663],{},"Sunset",[57,1665,1666,1682,1695,1712,1727,1742,1757,1772,1788,1803,1821,1835,1849,1863],{},[44,1667,1668,1671,1674,1677,1679],{},[62,1669,1670],{},"Android",[62,1672,1673],{},"v25.x.x",[62,1675,1676],{},"Supported",[62,1678,1312],{},[62,1680,1681],{},"June 30, 2028",[44,1683,1684,1686,1689,1691,1693],{},[62,1685,1670],{},[62,1687,1688],{},"v24.x.x",[62,1690,1676],{},[62,1692,1312],{},[62,1694,1681],{},[44,1696,1697,1699,1702,1705,1708],{},[62,1698,1670],{},[62,1700,1701],{},"v23.x.x",[62,1703,1704],{},"Deprecated",[62,1706,1707],{},"February 17, 2026",[62,1709,1710],{},[17,1711,1312],{},[44,1713,1714,1716,1719,1721,1724],{},[62,1715,1670],{},[62,1717,1718],{},"v22.x.x",[62,1720,1663],{},[62,1722,1723],{},"February 24, 2025",[62,1725,1726],{},"June 30, 2026",[44,1728,1729,1731,1734,1736,1739],{},[62,1730,1670],{},[62,1732,1733],{},"v21.x.x",[62,1735,1663],{},[62,1737,1738],{},"March 7, 2024",[62,1740,1741],{},"June 30, 2025",[44,1743,1744,1746,1749,1751,1754],{},[62,1745,1670],{},[62,1747,1748],{},"v20.x.x",[62,1750,1663],{},[62,1752,1753],{},"March 29, 2023",[62,1755,1756],{},"June 30, 2024",[44,1758,1759,1761,1764,1766,1769],{},[62,1760,1670],{},[62,1762,1763],{},"v7.x.x to v19.x.x",[62,1765,1663],{},[62,1767,1768],{},"September 30, 2022",[62,1770,1771],{},"June 30, 2023",[44,1773,1774,1777,1780,1782,1785],{},[62,1775,1776],{},"iOS",[62,1778,1779],{},"v13.x.x",[62,1781,1676],{},[62,1783,1784],{},"Q1 2028",[62,1786,1787],{},"Q2 2029",[44,1789,1790,1792,1795,1797,1800],{},[62,1791,1776],{},[62,1793,1794],{},"v12.x.x",[62,1796,1676],{},[62,1798,1799],{},"Q1 2027",[62,1801,1802],{},"Q2 2028",[44,1804,1805,1807,1810,1812,1815],{},[62,1806,1776],{},[62,1808,1809],{},"v11.x.x",[62,1811,1704],{},[62,1813,1814],{},"February 4, 2026",[62,1816,1817,1820],{},[17,1818,1819],{},"Q2 2027"," (footnote 1)",[44,1822,1823,1825,1828,1830,1833],{},[62,1824,1776],{},[62,1826,1827],{},"v10.x.x",[62,1829,1704],{},[62,1831,1832],{},"February 3, 2025",[62,1834,1726],{},[44,1836,1837,1839,1842,1844,1847],{},[62,1838,1776],{},[62,1840,1841],{},"v9.x.x",[62,1843,1663],{},[62,1845,1846],{},"February 6, 2024",[62,1848,1741],{},[44,1850,1851,1853,1856,1858,1861],{},[62,1852,1776],{},[62,1854,1855],{},"v8.x.x",[62,1857,1663],{},[62,1859,1860],{},"January 26, 2023",[62,1862,1756],{},[44,1864,1865,1867,1870,1872,1874],{},[62,1866,1776],{},[62,1868,1869],{},"v7.x.x",[62,1871,1663],{},[62,1873,1768],{},[62,1875,1771],{},[14,1877,1878,1879,713,1883,400],{},"Sources: ",[396,1880,1882],{"href":1325,"rel":1881},[568],"Android timetable",[396,1884,1886],{"href":1276,"rel":1885},[568],"iOS timetable",[14,1888,1889],{},"A few things to read carefully:",[322,1891,1892,1898,1904,1910],{},[261,1893,1894,1897],{},[17,1895,1896],{},"Quarters, not dates."," For iOS v11, v12 and v13, Google gives a quarter for the sunset. Footnote 1 says: \"A more specific sunset date will be announced on the Google Ads Developer blog and updated on this page with two months' notice.\" I can't tell you which day in Q2 2027 it is, because Google hasn't said.",[261,1899,1900,1903],{},[17,1901,1902],{},"iOS v10."," The table still lists v10.x.x as \"Deprecated\" although its June 30, 2026 sunset date has passed. Treat it as already sunset and leave it.",[261,1905,1906,1909],{},[17,1907,1908],{},"Dates can move."," Both pages say a version may be sunset earlier than the schedule, with advance communication.",[261,1911,1912,1915],{},[17,1913,1914],{},"The lifecycle rule."," Both pages say a major version is generally supported for about two years, deprecated for one more year, then sunset. When version N ships, N-2 becomes deprecated immediately and N-3 sunsets about two months later. The iOS page says Google plans one major release per year, in Q1.",[30,1917,1919],{"id":1918},"what-sunset-means","What sunset means",[14,1921,1922],{},"Google's pages define three states.",[322,1924,1925,1931,1937],{},[261,1926,1927,1930],{},[17,1928,1929],{},"Supported:"," ads serve, and technical support is available.",[261,1932,1933,1936],{},[17,1934,1935],{},"Deprecated:"," ads still serve, but technical support is limited (Android) or no longer provided (iOS). You may be asked to reproduce issues on a supported version.",[261,1938,1939,1942],{},[17,1940,1941],{},"Sunset:"," ads are at risk of not serving. When Google disables ad serving for a version, ad requests return a no fill with an error indicating that the version is sunset. Google says it disables serving gradually, starting with the oldest, lowest-usage versions.",[14,1944,1945],{},"So sunset is not a guaranteed switch-off on the date. It is the point where Google may turn your version off at any time, and there is no notice I could find for a given app. When it happens, your app does not crash because of Google. The ad slot just fails to fill, and your code sees a failed ad load. If you handle that as a normal failure, you will see empty ad spots and falling revenue, not an error screen. I have not tested the exact error string, so check your own logs for it.",[14,1947,1948],{},"My advice: do not plan around the sunset date. Plan around deprecation, when support ends. A version in the Deprecated row is already the one to move off.",[30,1950,1952],{"id":1951},"how-to-check-which-version-you-ship","How to check which version you ship",[14,1954,1955],{},"The version lives in your dependency line. I did not find an official command to print it, so I'd read the files below and then confirm in a release build.",[14,1957,1958,1961,1962,1965,1966,1969,1970,303,1973,1976],{},[17,1959,1960],{},"Android (Gradle)."," Google's quick start shows the dependency as ",[268,1963,1964],{},"implementation(\"com.google.android.gms:play-services-ads:25.5.0\")",", with the Groovy form ",[268,1967,1968],{},"implementation 'com.google.android.gms:play-services-ads:25.5.0'",". To update, change the version number and sync. The page says the Android SDK needs a minimum SDK version of 24 or higher, and a compile SDK version of 35 or higher. The migration page says the ",[268,1971,1972],{},"firebase-ads",[268,1974,1975],{},"firebase-ads-lite"," artifacts are no longer distributed from 24.0.0.",[14,1978,1979,1982,1983,1986,1987,1990,1991,1994],{},[17,1980,1981],{},"iOS (CocoaPods)."," Google's quick start line is ",[268,1984,1985],{},"pod 'Google-Mobile-Ads-SDK'",", followed by ",[268,1988,1989],{},"pod install --repo-update",". Check ",[268,1992,1993],{},"Podfile.lock"," to see the resolved version.",[14,1996,1997,2000,2001,2004,2005,2008,2009,2012,2013,400],{},[17,1998,1999],{},"iOS (Swift Package Manager)."," Add the package in Xcode from ",[268,2002,2003],{},"https:\u002F\u002Fgithub.com\u002Fgoogleads\u002Fswift-package-manager-google-mobile-ads.git",". For new projects the page recommends \"Up to Next Major Version\". The page says to use Xcode 16.0 or higher and target iOS 13.0 or higher, and that Xcode 27 requires a minimum deployment target of iOS 15.0, so CocoaPods builds need a ",[268,2006,2007],{},"post_install"," hook that sets ",[268,2010,2011],{},"IPHONEOS_DEPLOYMENT_TARGET"," to 15.0. For the Xcode side of that, see ",[396,2014,2015],{"href":692},"my iOS 27 SDK guide",[14,2017,2018,2021,2022,2025,2026,2029,2030,2033],{},[17,2019,2020],{},"Flutter (pubspec.yaml)."," The plugin is the ",[268,2023,2024],{},"google_mobile_ads"," package, and pub.dev lists 9.1.0 as the latest, installed with ",[268,2027,2028],{},"google_mobile_ads: ^9.1.0",". In Flutter you don't set the native version directly. The plugin pulls it in, so you read the version from ",[268,2031,2032],{},"pubspec.lock"," and look it up in the plugin changelog below.",[14,2035,2036,2037,2039,2040,303,2043,2046],{},"My advice: check all three files, not just one. A Flutter app has the plugin version in ",[268,2038,2032],{},", but the resolved native version also lands in ",[268,2041,2042],{},"android\u002F",[268,2044,2045],{},"ios\u002F"," build output. Confirm the native number there before you trust the plugin number.",[30,2048,2050],{"id":2049},"the-flutter-plugin-and-native-sdk-versions","The Flutter plugin and native SDK versions",[14,2052,2053],{},"Google's Flutter quick start lists Flutter 3.38.1 or higher as a prerequisite. It does not say which native SDK versions are bundled. The pub.dev changelog does, release by release. Here are the lines I read that name a native version:",[38,2055,2056,2069],{},[41,2057,2058],{},[44,2059,2060,2063,2066],{},[47,2061,2062],{},"Plugin version",[47,2064,2065],{},"Android GMA SDK",[47,2067,2068],{},"iOS GMA SDK",[57,2070,2071,2082,2093,2104,2115,2126,2137,2148,2159],{},[44,2072,2073,2076,2079],{},[62,2074,2075],{},"9.1.0",[62,2077,2078],{},"25.4.0",[62,2080,2081],{},"13.7.0",[44,2083,2084,2087,2090],{},[62,2085,2086],{},"9.0.0",[62,2088,2089],{},"25.3.0",[62,2091,2092],{},"13.3.0",[44,2094,2095,2098,2101],{},[62,2096,2097],{},"8.0.0",[62,2099,2100],{},"25.1.0",[62,2102,2103],{},"13.2.0",[44,2105,2106,2109,2112],{},[62,2107,2108],{},"7.0.0",[62,2110,2111],{},"24.9.0",[62,2113,2114],{},"12.14.0",[44,2116,2117,2120,2123],{},[62,2118,2119],{},"6.0.0",[62,2121,2122],{},"24.1.0",[62,2124,2125],{},"12.2.0",[44,2127,2128,2131,2134],{},[62,2129,2130],{},"5.3.0",[62,2132,2133],{},"23.6.0",[62,2135,2136],{},"11.13.0",[44,2138,2139,2142,2145],{},[62,2140,2141],{},"5.2.0",[62,2143,2144],{},"23.4.0",[62,2146,2147],{},"11.10.0",[44,2149,2150,2153,2156],{},[62,2151,2152],{},"5.0.0",[62,2154,2155],{},"23.0.0",[62,2157,2158],{},"11.2.0",[44,2160,2161,2164,2167],{},[62,2162,2163],{},"4.0.0",[62,2165,2166],{},"22.5.0",[62,2168,2169],{},"10.11.0",[14,2171,2172],{},"Read against the timetables above, that gives you a rough guide for a Flutter app:",[322,2174,2175,2178,2181],{},[261,2176,2177],{},"Plugin 5.x lines up with Android v23 and iOS v11, the two majors whose sunsets Google lists as June 30, 2027 and Q2 2027.",[261,2179,2180],{},"Plugin 4.0.0 lines up with Android v22, whose sunset in the table has passed, and iOS v10.",[261,2182,2183],{},"Plugin 6.0.0 and 7.0.0 line up with Android v24 and iOS v12. Plugin 8.0.0, 9.0.0 and 9.1.0 line up with Android v25 and iOS v13.",[14,2185,2186,2187,2190,2191,2194],{},"The changelog lists the Android Next-Gen SDK too: 9.1.0 shows \"Google Mobile Ads Next-Gen SDK version ",[268,2188,2189],{},"1.3.1","\" and 9.0.0 shows ",[268,2192,2193],{},"1.1.0",". It does not say whether the plugin uses it instead of, or beside, the legacy SDK, so I can't tell you.",[14,2196,2197],{},"What I could not confirm: whether the plugin has its own support or sunset policy, and whether older plugin versions stop working at the native sunset dates. I take that to follow from the native SDK, because the plugin wraps it, but no Flutter page I fetched says so.",[30,2199,2201],{"id":2200},"updating","Updating",[14,2203,2204],{},"Google's Android and iOS migration pages are written as jumps from one major to the next. Read the page for each jump you make.",[322,2206,2207,2231,2244,2262],{},[261,2208,2209,2212,2213,303,2216,2219,2220,2223,2224,2227,2228,400],{},[17,2210,2211],{},"Android to v25."," Starting in v25.5.0, \"Google Mobile Ads SDK (Legacy) requires all apps to run on a minimum Android API level 24.\" It removes the ",[268,2214,2215],{},"onFailure(String)",[268,2217,2218],{},"onAdFailedToShow(String)"," callbacks in favor of the ",[268,2221,2222],{},"AdError"," overloads, and it replaces the anchored adaptive banner methods with \"Large\" variants. ",[268,2225,2226],{},"com.google.android.gms.ads.mediation.VersionInfo"," is removed in favor of ",[268,2229,2230],{},"com.google.android.gms.ads.VersionInfo",[261,2232,2233,2236,2237,2240,2241,400],{},[17,2234,2235],{},"iOS to v13."," The minimum deployment target rises to iOS 13, and the anchored adaptive banner functions are replaced by \"Large\" variants. ",[268,2238,2239],{},"neighboringContentURLStrings"," now raises an exception if the array contains an item that isn't a ",[268,2242,2243],{},"String",[261,2245,2246,2249,2250,2253,2254,2257,2258,2261],{},[17,2247,2248],{},"GMA Next-Gen SDK (Android)."," Google's Next-Gen page shows ",[268,2251,2252],{},"implementation(\"com.google.android.libraries.ads.mobile.sdk:ads-mobile-sdk:1.5.0\")"," and says it needs ",[268,2255,2256],{},"minSdk"," 24 and ",[268,2259,2260],{},"compileSdk"," 34 or higher. It requires initialization before you load ads, which was optional in the legacy SDK. The page covers Android only.",[261,2263,2264,2267,2268,303,2271,2274],{},[17,2265,2266],{},"Mediation."," The Next-Gen page says: \"Mediation adapters continue to depend on Google Mobile Ads SDK (Legacy),\" and that you must exclude the legacy ",[268,2269,2270],{},"play-services-ads",[268,2272,2273],{},"play-services-ads-lite"," modules to avoid duplicate-symbol errors. The deprecation tables themselves say nothing about adapters.",[14,2276,2277],{},"I would not take the Next-Gen path unless you have a reason. The Android table lists v25 as Supported to June 30, 2028, and updating to v25 is a smaller change. That is my call, not Google's, and the Android page does tell you to migrate to Next-Gen.",[14,2279,2280],{},"My advice: do the update in one pull request, with only that change in it. Build a release, test an ad of each format you use on a real device, and watch the first week of fill rate in AdMob before you ship the next feature on top.",[30,2282,353],{"id":352},[258,2284,2285,2299,2305,2311,2317,2323],{},[261,2286,2287,2290,2291,713,2294,2296,2297,400],{},[17,2288,2289],{},"Find your versions."," Read ",[268,2292,2293],{},"build.gradle",[268,2295,1993],{}," or your SPM resolution, and ",[268,2298,2032],{},[261,2300,2301,2304],{},[17,2302,2303],{},"Find the row."," Match each version to the table. Any Deprecated row is your priority. Any Sunset row is already at risk.",[261,2306,2307,2310],{},[17,2308,2309],{},"Pick the target."," Android v25 or the Next-Gen SDK. iOS v13. For Flutter, the latest plugin whose changelog names those versions.",[261,2312,2313,2316],{},[17,2314,2315],{},"Read the migration page"," for every major you skip, and note any minimum OS change.",[261,2318,2319,2322],{},[17,2320,2321],{},"Check mediation."," If you use adapters, check each network's own pages. Google's deprecation pages say nothing about them.",[261,2324,2325,2328],{},[17,2326,2327],{},"Test a release build"," with real ads, on a real device, before you submit.",[14,2330,394,2331,400],{},[396,2332,399],{"href":398},[30,2334,404],{"id":403},[14,2336,2337,2338,412,2340,400],{},"If your Flutter app still ships an old AdMob SDK and you want it updated before Google switches it off, the ",[396,2339,411],{"href":410},[396,2341,416],{"href":415},{"title":418,"searchDepth":419,"depth":419,"links":2343},[2344,2345,2346,2347,2348,2349,2350],{"id":32,"depth":419,"text":33},{"id":1918,"depth":419,"text":1919},{"id":1951,"depth":419,"text":1952},{"id":2049,"depth":419,"text":2050},{"id":2200,"depth":419,"text":2201},{"id":352,"depth":419,"text":353},{"id":403,"depth":419,"text":404},"2026-10-19T20:00:00.000Z","Google Mobile Ads SDK (AdMob) deprecation and sunset dates for Android and iOS, what happens to ad requests at sunset, how to check the version you ship, and how the Flutter google_mobile_ads plugin fits in. Checked October 19, 2026.",[2354,2357,2360,2363,2366],{"question":2355,"answer":2356},"When does the Google Mobile Ads SDK stop serving ads?","It depends on the major version. Google's Android timetable lists June 30, 2027 as the sunset date for v23.x.x and June 30, 2028 for v24.x.x and v25.x.x. Its iOS timetable lists Q2 2027 for v11.x.x, Q2 2028 for v12.x.x and Q2 2029 for v13.x.x. Sunset means ads are at risk of not serving, not that they stop on the exact date. Google says it may also bring dates forward with advance communication.",{"question":2358,"answer":2359},"What error do I see when my SDK version is sunset?","Google says that once ad serving is disabled for a sunset version, ad requests return a no fill with an error indicating that the version is sunset. Your app keeps running, but that placement shows no ad and earns nothing. Google adds that it disables serving gradually, starting with the oldest, lowest-usage versions.",{"question":2361,"answer":2362},"Which Flutter google_mobile_ads version uses which native SDK?","The pub.dev changelog states it per release. For example, 9.1.0 lists Google Mobile Ads SDK 25.4.0 for Android and 13.7.0 for iOS, 7.0.0 lists 24.9.0 and 12.14.0, and 5.3.0 lists 23.6.0 and 11.13.0. I read only the lines that name a native version. The changelog does not list a sunset date for the plugin itself, so I take the dates from the native SDK tables.",{"question":2364,"answer":2365},"Do I have to move to the GMA Next-Gen SDK?","The Android deprecation page lists v25.x.x as Supported with a sunset of June 30, 2028, and its migration link for v25 points to the Next-Gen SDK. It also says the Google Mobile Ads SDK is in maintenance mode. I found no sunset date for v25 earlier than 2028, so updating to v25 keeps you supported for now. The Next-Gen migration page is Android only, and says mediation adapters continue to depend on the legacy SDK.",{"question":2367,"answer":2368},"Does updating the SDK break my build?","It can. Google's Android migration page says starting in v25.5.0 apps must run on Android API level 24 or higher, and removes some callbacks and the mediation VersionInfo class. Its iOS page says v13 raises the deployment target to iOS 13. Read the migration page for your jump and build a release on a real device before you submit.",{"readingTimeStats":2370},{"text":2371,"minutes":2372,"time":2373,"words":2374},"8 min read",7.78,466800,1556,"\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027","google mobile ads sdk sunset","9 min",[1573,2379,2380],"ios-27-sdk-requirement-april-2027-xcode-27-flutter","play-billing-library-9-migration-deadline-2027",{"title":1621,"description":2352},[2383,2385,2387,2390,2393,2396,2399,2402,2405,2408],{"title":2384,"url":1325},"Google for Developers, AdMob Android: Deprecation and sunset",{"title":2386,"url":1276},"Google for Developers, AdMob iOS: Deprecation and sunset",{"title":2388,"url":2389},"Google for Developers, AdMob Android: Migrate SDK versions","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fmigration",{"title":2391,"url":2392},"Google for Developers, AdMob iOS: Migrate SDK versions","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fmigration",{"title":2394,"url":2395},"Google for Developers, AdMob Android: Migrate to GMA Next-Gen SDK","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fnext-gen\u002Fmigration",{"title":2397,"url":2398},"Google for Developers, AdMob Android: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fandroid\u002Fquick-start",{"title":2400,"url":2401},"Google for Developers, AdMob iOS: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fios\u002Fquick-start",{"title":2403,"url":2404},"Google for Developers, AdMob Flutter: Quick start","https:\u002F\u002Fdevelopers.google.com\u002Fadmob\u002Fflutter\u002Fquick-start",{"title":2406,"url":2407},"pub.dev, google_mobile_ads changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_mobile_ads\u002Fchangelog",{"title":2409,"url":2410},"pub.dev, google_mobile_ads","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_mobile_ads","blog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027","admob sdk sunset, google mobile ads sdk deprecation, google mobile ads sdk versions, admob no fill sunset error, play-services-ads update, Google-Mobile-Ads-SDK cocoapods, google_mobile_ads flutter update, gma next-gen sdk, admob android v23 sunset, admob ios v11 sunset",[2414,2415,2416,2417,2418],"On Android, Google lists v23.x.x with a sunset date of June 30, 2027, and v24.x.x and v25.x.x with a sunset date of June 30, 2028. On iOS, v11.x.x has a sunset of \"Q2 2027\", v12.x.x \"Q2 2028\" and v13.x.x \"Q2 2029\". Google gives the iOS sunsets as quarters only, not exact dates.","Google's iOS page says that when ad serving is disabled for a sunset version, \"ad requests return a no fill with an error indicating that this version is sunset.\" Sunset versions are at risk, and Google disables the oldest, lowest-usage versions first.","Google's iOS page says a more specific v11 sunset date will be announced \"with two months' notice\", so I would not wait for that notice before updating.","Google describes the Google Mobile Ads SDK as \"in maintenance mode\" on its Android pages and points Android developers to the GMA Next-Gen SDK. Its iOS deprecation page has no Next-Gen content.","For Flutter, the google_mobile_ads changelog states which native SDK each plugin release pulls in, so you can look up your version. I could not find a statement of the plugin's own support or sunset policy.","https:\u002F\u002Fapp369.com\u002Fblog\u002Fadmob-google-mobile-ads-sdk-sunset-versions-2027\u002F","CoD7CaClpH-lEN4vOQKVdeevmUXsQX2O0vqeSBFNLRc",{"id":2422,"title":2423,"author":2424,"body":2426,"category":430,"createdAt":2923,"description":2924,"disclosure":433,"extension":434,"faq":2925,"howTo":433,"lastVerified":433,"location":451,"meta":2944,"navigation":458,"ogImage":433,"path":2950,"primaryKeyword":2951,"readingTime":461,"related":2952,"seo":2955,"sources":2956,"stem":2986,"tags":2987,"takeaways":2988,"updatedAt":2923,"url":2994,"__hash__":2995},"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":2425},{"twitter":9},{"type":11,"value":2427,"toc":2914},[2428,2449,2452,2456,2460,2547,2550,2554,2557,2591,2595,2604,2720,2724,2734,2801,2804,2808,2899,2901],[14,2429,2430,2433,2434,303,2437,2440,2441,2444,2445,2448],{},[17,2431,2432],{},"Google Sign-In for Android is deprecated, and Sign in with Google now runs through Credential Manager."," If your app still uses ",[268,2435,2436],{},"GoogleSignInClient",[268,2438,2439],{},"GoogleSignInOptions"," from ",[268,2442,2443],{},"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 ",[268,2446,2447],{},"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,2450,2451],{},"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,2453,2454,1639],{},[17,2455,27],{},[30,2457,2459],{"id":2458},"what-changed-and-when","What changed, and when",[38,2461,2462,2474],{},[41,2463,2464],{},[44,2465,2466,2469,2472],{},[47,2467,2468],{},"When",[47,2470,2471],{},"What happened",[47,2473,542],{},[57,2475,2476,2490,2503,2516,2533],{},[44,2477,2478,2481,2484],{},[62,2479,2480],{},"September 11, 2024",[62,2482,2483],{},"Google announces that Credential Manager replaces its legacy Android sign-in APIs, and publishes a removal timeline",[62,2485,2486],{},[396,2487,1349],{"href":2488,"rel":2489},"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2024\u002F09\u002Fstreamlining-android-authentication-credential-manager-replaces-legacy-apis.html",[568],[44,2491,2492,2495,2498],{},[62,2493,2494],{},"Q1 2025",[62,2496,2497],{},"Smart Lock for Passwords: listed as fully shut down",[62,2499,2500],{},[396,2501,1349],{"href":2488,"rel":2502},[568],[44,2504,2505,2508,2511],{},[62,2506,2507],{},"H1 2025",[62,2509,2510],{},"Credential Saving API and the Sign in with Google button API: listed for removal",[62,2512,2513],{},[396,2514,1349],{"href":2488,"rel":2515},[568],[44,2517,2518,2523,2528],{},[62,2519,2520],{},[17,2521,2522],{},"H2 2025",[62,2524,2525],{},[17,2526,2527],{},"One Tap and Google Sign-In for Android: listed for removal",[62,2529,2530],{},[396,2531,1349],{"href":2488,"rel":2532},[568],[44,2534,2535,2538,2541],{},[62,2536,2537],{},"Now",[62,2539,2540],{},"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",[62,2542,2543],{},[396,2544,642],{"href":2545,"rel":2546},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Flegacy-gsi-migration",[568],[14,2548,2549],{},"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.",[153,2551,2553],{"id":2552},"what-the-old-addresses-do-today","What the old addresses do today",[14,2555,2556],{},"Checked on October 18, 2026:",[322,2558,2559,2569,2575,2585],{},[261,2560,2561,2564,2565,2568],{},[17,2562,2563],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fstart-integrating",", the old setup guide, ",[17,2566,2567],{},"redirects"," to the Android Credential Manager overview.",[261,2570,2571,2574],{},[17,2572,2573],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Fsign-in"," redirects there too.",[261,2576,2577,2580,2581,2584],{},[17,2578,2579],{},"developers.google.com\u002Fidentity\u002Fsign-in\u002Fandroid\u002Flegacy-gsi-migration"," returned ",[17,2582,2583],{},"404",". The live migration page is on developer.android.com, linked in the sources.",[261,2586,2587,2590],{},[17,2588,2589],{},"developers.google.com\u002Fidentity\u002Fone-tap\u002Fandroid\u002Foverview"," redirects to a page that says One Tap for Android is deprecated.",[30,2592,2594],{"id":2593},"moving-a-native-android-app-to-credential-manager","Moving a native Android app to Credential Manager",[14,2596,2597,2598,2603],{},"The steps follow Google's ",[396,2599,2602],{"href":2600,"rel":2601},"https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg-implementation",[568],"Sign in with Google implementation guide",":",[258,2605,2606,2628,2638,2659,2680,2686,2696,2709],{},[261,2607,2608,2611,2612,713,2615,303,2618,2621,2622,2627],{},[17,2609,2610],{},"Add the dependencies."," Add ",[268,2613,2614],{},"androidx.credentials:credentials",[268,2616,2617],{},"androidx.credentials:credentials-play-services-auth",[268,2619,2620],{},"com.google.android.libraries.identity.googleid:googleid",". Check the ",[396,2623,2626],{"href":2624,"rel":2625},"https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fandroidx\u002Freleases\u002Fcredentials",[568],"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.",[261,2629,2630,2633,2634,2637],{},[17,2631,2632],{},"Use your web client ID."," Google's guide passes the ",[17,2635,2636],{},"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.",[261,2639,2640,2643,2644,2647,2648,2651,2652,2655,2656,400],{},[17,2641,2642],{},"Build the request."," For the bottom-sheet flow, use ",[268,2645,2646],{},"GetGoogleIdOption"," with your web client ID. Google's guide first sets ",[268,2649,2650],{},"setFilterByAuthorizedAccounts(true)"," to offer accounts that already signed in, with ",[268,2653,2654],{},"setAutoSelectEnabled(true)"," for returning users. For a \"Sign in with Google\" button, use ",[268,2657,2658],{},"GetSignInWithGoogleOption",[261,2660,2661,2664,2665,2668,2669,2672,2673,2676,2677,400],{},[17,2662,2663],{},"Call Credential Manager."," Create it with ",[268,2666,2667],{},"CredentialManager.create(context)"," and call ",[268,2670,2671],{},"getCredential"," with the request. When the result is a ",[268,2674,2675],{},"GoogleIdTokenCredential",", read it with ",[268,2678,2679],{},"GoogleIdTokenCredential.createFrom(credential.data)",[261,2681,2682,2685],{},[17,2683,2684],{},"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.",[261,2687,2688,2691,2692,2695],{},[17,2689,2690],{},"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 ",[268,2693,2694],{},"AuthorizationClient"," API when the user needs that feature, not at sign-in.",[261,2697,2698,2701,2702,2705,2706,400],{},[17,2699,2700],{},"Replace silent sign-in."," Google's migration page says to use a request with ",[268,2703,2704],{},"filterByAuthorizedAccounts"," set to true and auto-select on, in place of ",[268,2707,2708],{},"silentSignIn",[261,2710,2711,2714,2715,713,2717,2719],{},[17,2712,2713],{},"Remove the old code."," Once the new path works, remove ",[268,2716,2436],{},[268,2718,2439],{}," and any One Tap code, so an old error can't be mistaken for a new one.",[30,2721,2723],{"id":2722},"moving-a-flutter-app-to-google_sign_in-7","Moving a Flutter app to google_sign_in 7",[14,2725,2726,2727,2730,2731,2733],{},"On Android, ",[268,2728,2729],{},"google_sign_in_android"," 7.0.0 switched to Credential Manager. Its changelog says it removed the deprecated Google Sign In for Android SDK. ",[268,2732,2447],{}," 7.0.0 is a breaking release, and its changelog lists the main changes:",[322,2735,2736,2752,2766,2783],{},[261,2737,2738,2744,2745,2748,2749,400],{},[17,2739,2740,2743],{},[268,2741,2742],{},"GoogleSignIn"," is a singleton."," Use ",[268,2746,2747],{},"GoogleSignIn.instance"," instead of creating your own ",[268,2750,2751],{},"GoogleSignIn(...)",[261,2753,2754,2757,2758,2761,2762,2765],{},[17,2755,2756],{},"Initialize first."," Call and await ",[268,2759,2760],{},"initialize",", passing ",[268,2763,2764],{},"serverClientId"," where needed, before any other method.",[261,2767,2768,2774,2775,2778,2779,2782],{},[17,2769,2770,2771,400],{},"Sign-in is ",[268,2772,2773],{},"authenticate()"," Check ",[268,2776,2777],{},"supportsAuthenticate()"," first, because not every platform supports it. ",[268,2780,2781],{},"attemptLightweightAuthentication()"," covers returning users.",[261,2784,2785,2788,2789,2792,2793,2796,2797,2800],{},[17,2786,2787],{},"Authentication and authorization are separate."," Access tokens and server auth codes come from separate calls through the account's ",[268,2790,2791],{},"authorizationClient",", with ",[268,2794,2795],{},"authorizationForScopes"," to check and ",[268,2798,2799],{},"authorizeScopes"," to ask, from a user interaction.",[14,2802,2803],{},"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.",[30,2805,2807],{"id":2806},"when-sign-in-breaks-after-the-move","When sign-in breaks after the move",[38,2809,2810,2823],{},[41,2811,2812],{},[44,2813,2814,2817,2820],{},[47,2815,2816],{},"What you see",[47,2818,2819],{},"What it usually means",[47,2821,2822],{},"What to check",[57,2824,2825,2849,2860,2871,2885],{},[44,2826,2827,2830,2833],{},[62,2828,2829],{},"\"serverClientId must be provided on Android\"",[62,2831,2832],{},"The plugin can't find your web OAuth client",[62,2834,2835,2838,2839,2842,2843,2846,2847],{},[268,2836,2837],{},"google-services.json"," needs an ",[268,2840,2841],{},"oauth_client"," entry with ",[268,2844,2845],{},"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 ",[268,2848,2760],{},[44,2850,2851,2854,2857],{},[62,2852,2853],{},"Sign-in reports \"canceled\" when the user didn't cancel",[62,2855,2856],{},"Sometimes a configuration error",[62,2858,2859],{},"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",[44,2861,2862,2865,2868],{},[62,2863,2864],{},"Works in debug, fails in release or from Play",[62,2866,2867],{},"The release signing key's SHA isn't registered",[62,2869,2870],{},"Register the signing SHA for each build configuration that fails, including the Play App Signing key shown in Play Console if you use it",[44,2872,2873,2876,2879],{},[62,2874,2875],{},"Sign-in works, but API calls fail with no token",[62,2877,2878],{},"Authentication and authorization are separate steps now",[62,2880,2881,2882,2884],{},"Request them with AuthorizationClient (",[268,2883,2799],{}," in Flutter)",[44,2886,2887,2890,2893],{},[62,2888,2889],{},"Package name mismatch",[62,2891,2892],{},"The Android client in Google Cloud has a different package name",[62,2894,2895,2896],{},"Match the package name in Google Cloud or Firebase to ",[268,2897,2898],{},"applicationId",[30,2900,404],{"id":403},[14,2902,2903,2904,2906,2907,2911,2912,400],{},"If sign-in still fails after the move, or it works on your phone but not for your users, the ",[396,2905,411],{"href":410}," 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 ",[396,2908,2910],{"href":2909},"\u002Fblog\u002Fsafetynet-shut-down-play-integrity-app-check-2026\u002F","SafetyNet is gone: moving to Play Integrity and App Check",", or ",[396,2913,416],{"href":415},{"title":418,"searchDepth":419,"depth":419,"links":2915},[2916,2919,2920,2921,2922],{"id":2458,"depth":419,"text":2459,"children":2917},[2918],{"id":2552,"depth":424,"text":2553},{"id":2593,"depth":419,"text":2594},{"id":2722,"depth":419,"text":2723},{"id":2806,"depth":419,"text":2807},{"id":403,"depth":419,"text":404},"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.",[2926,2929,2932,2935,2938,2941],{"question":2927,"answer":2928},"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":2930,"answer":2931},"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":2933,"answer":2934},"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":2936,"answer":2937},"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":2939,"answer":2940},"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":2942,"answer":2943},"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.",{"readingTimeStats":2945},{"text":2946,"minutes":2947,"time":2948,"words":2949},"5 min read",5.005,300300,1001,"\u002Fblog\u002Fgoogle-sign-in-android-deprecated-credential-manager-2026","google sign-in android deprecated",[2953,1575,2954],"safetynet-shut-down-play-integrity-app-check-2026","how-to-debug-a-flutter-firebase-bug-2026",{"title":2423,"description":2924},[2957,2959,2961,2964,2966,2969,2972,2974,2977,2980,2983],{"title":2958,"url":2488},"Android Developers Blog, \"Streamlining Android authentication: Credential Manager replaces legacy APIs\" (September 11, 2024)",{"title":2960,"url":2545},"Android Developers, about the migration from legacy Google Sign-In",{"title":2962,"url":2963},"Android Developers, about Sign in with Google","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fsign-in\u002Fcredential-manager-siwg",{"title":2965,"url":2600},"Android Developers, implement Sign in with Google",{"title":2967,"url":2968},"Android Developers, about Credential Manager","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Fcredential-manager",{"title":2970,"url":2971},"Android Developers, One Tap for Android (deprecated)","https:\u002F\u002Fdeveloper.android.com\u002Fidentity\u002Flegacy\u002Fone-tap\u002F",{"title":2973,"url":2624},"Android Developers, androidx.credentials releases",{"title":2975,"url":2976},"Firebase, authenticate with Google on Android","https:\u002F\u002Ffirebase.google.com\u002Fdocs\u002Fauth\u002Fandroid\u002Fgoogle-signin",{"title":2978,"url":2979},"pub.dev, google_sign_in_android (Android setup and troubleshooting)","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in_android",{"title":2981,"url":2982},"pub.dev, google_sign_in changelog","https:\u002F\u002Fpub.dev\u002Fpackages\u002Fgoogle_sign_in\u002Fchangelog",{"title":2984,"url":2985},"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",[2989,2990,2991,2992,2993],"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",[2997,2999,3003,3005,3008,3011],{"keyword":5,"url":497,"title":5,"relevance":2998},85,{"keyword":3000,"url":3001,"title":3000,"relevance":3002},"Android Developer Verification: Dates and What to Do","https:\u002F\u002Fapp369.com\u002Fblog\u002Fandroid-developer-verification-requirement-2026\u002F",12,{"keyword":1621,"url":2419,"title":1621,"relevance":3004},9,{"keyword":3006,"url":3007,"title":3006,"relevance":3004},"Flutter \"Deleted Android v1 Embedding\" Build Error: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-deleted-android-v1-embedding-build-failed-2026\u002F",{"keyword":3009,"url":3010,"title":3009,"relevance":3004},"Flutter vs Native in 2026: An Honest Decision Guide","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-vs-native-app-development-2026\u002F",{"keyword":3012,"url":3013,"title":3012,"relevance":3014},"Flutter Android Build Fails After AGP 9: The Fix","https:\u002F\u002Fapp369.com\u002Fblog\u002Fflutter-android-gradle-plugin-9-build-failed-fix-2026\u002F",8,1792456191537]