Känns som att många av svaren bara flyttar problemet från API-nyckeln till hur du nu autentiserar dig hos din egen backend.
En konkret lösning är att kryptera API-nyckeln och lagra den krypterad i appen. Nyckeln för att dekryptera kan du skapa "on the fly" i appen genom en lämplig hyfsat komplex algoritm som skapar något slags sträng som används som krypteringsnyckel. På så sätt behöver du inte lagra något i klartext.
Självklart kan en tillräckligt motiverad hackare antingen fixa något sätt att övervaka nätverkstrafiken från appen (fast med HTTPS är det inte en barnlek), eller dekompilera appen och lyckas återskapa formeln som dekrypterar den krypterade API-nyckeln. Men då ska det nog röra sig om betydligt merstöldbegärliga grejer än en väderapp
Många API'er, t.ex. Google Cloud, har mekanismer för att begränsa en API-nyckel baserat på t.ex. app-id, anropande webbdomän, etc.
En kombination av ovanstående krypteringsteknik, egen backend som anropar det riktiga API'et samt begränsning mha. API'ets egna begränsningsmekanismer torde vara fullt tillräckligt för de flesta behov.
Och om det är ett betal-API sätter du givetvis en övre budget med varning när kostnaden börjar närma sig budget, så riskerar du inte extremdyra överraskningar.