Awesome
quave:universal-links
quave:universal-links
is a Meteor package that allows you to expose your native iOS settings to enable Universal Links.
Why
It is very useful to lunch your app from a link and this package make this configuration a breeze.
Remember that you need to enable Associated Domains
in your app and also configure Universal Links in your mobile-config.js
.
We believe we are not reinventing the wheel in this package but what we are doing is like putting together the wheels in the vehicle :).
Installation
meteor add quave:universal-links
Usage
In your settings
"packages": {
"quave:universal-links": {
"appleTeamId": "VR7QCJTCL2",
"appleBundleId": "com.yoursite.app"
}
}
In your server
import { Meteor } from 'meteor/meteor';
import { registerUniversalLinksHandler } from 'meteor/quave:universal-links';
Meteor.startup(() => {
registerUniversalLinksHandler();
});
That is it, now you can access http://localhost:3000/apple-app-site-association and you will get back Apple required configuration for Universal Links.
Advanced
If you want to provide appleTeamId
and appleBundleId
in runtime (in case you serve multiple apps from the same backend) you can use
createResponderAppleAppSiteAssociation
function. See a full example from a market place that each store can have a native app.
import { createResponderAppleAppSiteAssociation } from 'meteor/quave:universal-links';
import { StoresCollection } from '../../app/stores/data/StoresCollection';
import { getNativeStoresInfo } from './native';
import { getBaseUrlFromHeaders } from '../mode/modeCommon';
export const appleAppSiteAssociation = (req, res) => {
const baseUrl = getBaseUrlFromHeaders(req.headers);
const store = StoresCollection.findByFullUrl(baseUrl);
const nativeStoresInfo = getNativeStoresInfo(store);
if (!nativeStoresInfo.nativeAppEnabled) {
res.setHeader('Content-Type', 'text/html');
res.writeHead(405);
res.end(`<h1>Native App not enabled for ${store.name}</h1>`);
return;
}
if (!nativeStoresInfo.appleTeamId || !nativeStoresInfo.appleBundleId) {
res.setHeader('Content-Type', 'text/html');
res.writeHead(405);
res.end(
`<h1>Bundle ID and Team ID are not configured for ${store.name}</h1>`
);
return;
}
createResponderAppleAppSiteAssociation(nativeStoresInfo)(req, res);
};
Meteor.startup(() => {
WebApp.connectHandlers.use(
APPLE_APP_SITE_ASSOCIATION_PATH,
Meteor.bindEnvironment(appleAppSiteAssociation)
);
});
License
MIT