To redirect from a website to google-play I have to add a <meta-data>
to AndroidManifest.xml
:
https://web.dev/get-installed-related-apps/
Is there an option to add configure this line via app.json
:
<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
wodin
2
Hi @doublex
I don’t know of something to do that, but it should be a pretty simple config plugin.
See withAndroidManifest
and withStringsXml
here:
See also:
@wodin
Thanks a lot for your answer!
I have adapted your suggestion a little:
const { AndroidConfig, withAndroidManifest, withStringsXml } = require('@expo/config-plugins');
module.exports = function androidManifestPlugin(config) {
config = withAndroidManifest( config, async (config) => {
const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
// https://web.dev/get-installed-related-apps/
AndroidConfig.Manifest.addMetaDataItemToMainApplication(
mainApplication,
'asset_statements',
'@string/asset_statements',
'resource'
);
return config;
});
config = withStringsXml( config, async (config) => {
config.modResults = await AndroidConfig.Strings.setStringItem(
[
{
$: {
name: 'asset_statements',
},
_: JSON.stringify(
[
{
'relation': ['delegate_permission/common.handle_all_urls'],
'target': {
'namespace': 'web',
'site': 'https://example.com',
},
},
]
),
},
],
config.modResults
);
return config;
});
return config;
};
1 Like
wodin
4
You could of course take the site as a prop instead of hard coding it.
Something like:
"plugins": [
[
"./plugins/withAndroidPlayStoreRedirect",
{
"site": "https://example.com"
}
]
]
module.exports = function withAndroidPlayStoreRedirect(config, { site }) {
// [...]
@wodin
You really know your stuff!
With help from @wodin
playstore-redirect.js
:
const { AndroidConfig, withAndroidManifest, withStringsXml } = require('@expo/config-plugins');
module.exports = function withPlayStoreRedirect( config, { site } ) {
config = withAndroidManifest( config, async (config) => {
const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow(config.modResults);
// https://web.dev/get-installed-related-apps/
AndroidConfig.Manifest.addMetaDataItemToMainApplication(
mainApplication,
'asset_statements',
'@string/asset_statements',
'resource'
);
return config;
});
config = withStringsXml( config, async (config) => {
config.modResults = await AndroidConfig.Strings.setStringItem(
[
{
$: {
name: 'asset_statements',
},
_: JSON.stringify(
(Array.isArray(site) ? site : [site]).map( site => ({
'relation': ['delegate_permission/common.handle_all_urls'],
'target': {
'namespace': 'web',
'site': site,
},
})) ),
},
],
config.modResults
);
return config;
});
return config;
};
app.json
:
"plugins": [
[
"./playstore-redirect",
{
"site": ["https://example.com", "https://www.example.com"]
}
]
]
1 Like
system
Closed
7
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.