50 lines
1.6 KiB
JavaScript
50 lines
1.6 KiB
JavaScript
/**
|
|
* Plugin local: injeta o intent filter do Google OAuth no AndroidManifest.xml
|
|
* durante o `expo prebuild`.
|
|
*
|
|
* expo-auth-session v5+ usa ${Application.applicationId}:/oauthredirect como
|
|
* redirect URI nativo (ex: com.meowspool.app:/oauthredirect).
|
|
* Sem esse intent filter, o Android não intercepta o redirect e o Chrome
|
|
* trata a URL como pesquisa, redirecionando para o google.com.
|
|
*/
|
|
const { withAndroidManifest } = require("@expo/config-plugins");
|
|
|
|
// Scheme gerado por expo-auth-session v7: applicationId do app
|
|
const APP_SCHEME = "com.meowspool.app";
|
|
|
|
module.exports = function withGoogleOAuth(config) {
|
|
return withAndroidManifest(config, (config) => {
|
|
const manifest = config.modResults;
|
|
const activities = manifest.manifest.application?.[0]?.activity ?? [];
|
|
|
|
const mainActivity = activities.find(
|
|
(a) => a.$?.["android:name"] === ".MainActivity",
|
|
);
|
|
|
|
if (!mainActivity) return config;
|
|
|
|
// Evita duplicar o intent filter em rebuilds consecutivos
|
|
const alreadyAdded = (mainActivity["intent-filter"] ?? []).some((filter) =>
|
|
(filter.data ?? []).some(
|
|
(d) => d.$?.["android:scheme"] === APP_SCHEME,
|
|
),
|
|
);
|
|
|
|
if (alreadyAdded) return config;
|
|
|
|
mainActivity["intent-filter"] = [
|
|
...(mainActivity["intent-filter"] ?? []),
|
|
{
|
|
action: [{ $: { "android:name": "android.intent.action.VIEW" } }],
|
|
category: [
|
|
{ $: { "android:name": "android.intent.category.DEFAULT" } },
|
|
{ $: { "android:name": "android.intent.category.BROWSABLE" } },
|
|
],
|
|
data: [{ $: { "android:scheme": APP_SCHEME } }],
|
|
},
|
|
];
|
|
|
|
return config;
|
|
});
|
|
};
|