import {
withAndroidManifest,
AndroidManifest,
ConfigPlugin,
XML,
} from '@expo/config-plugins';
const serviceName = 'com.braze.push.BrazeFirebaseMessagingService';
const BrazeFirebaseMessagingServiceXml = `
`;
const addService = async (androidManifest: AndroidManifest) => {
const { manifest } = androidManifest;
if (!Array.isArray(manifest.application)) {
throw new Error(
'withAddedMessagingService: No manifest.application array!',
);
}
const application = manifest.application.find(
(item) => item.$['android:name'] === '.MainApplication',
);
if (!application) {
throw new Error('withAddedMessagingService: No .MainApplication!');
}
const services = Array.isArray(application.service)
? application.service
: [];
if (!services.find((item) => item.$['android:name'] === serviceName)) {
const BrazeFirebaseMessagingService = await XML.parseXMLAsync(
BrazeFirebaseMessagingServiceXml,
);
const { service } = BrazeFirebaseMessagingService;
services.push(service as any);
}
application.service = services;
return androidManifest;
};
export const withAddedMessagingService: ConfigPlugin = (
configOuter,
) => {
return withAndroidManifest(configOuter, async (config) => {
config.modResults = await addService(config.modResults);
return config;
});
};