Plugin: mam-universal-link-manager

What it does

mam-universal-link-manager makes links and apps work together. It does three jobs:

  • Publishes the iOS trust file (AASA). Writes apple-app-site-association to your web root and /.well-known/ so iOS opens your app — not Safari — when someone taps a link to your site. Built from your Team ID, Bundle ID, and an optional path pattern.
  • Publishes the Android trust file. Writes the assetlinks.json you paste from the Play Console to /.well-known/assetlinks.json so Android App Links open your app.
  • Branch.io deep links (optional). With Branch keys configured, the plugin creates Branch deep links on demand. MAM Main’s contact invites automatically upgrade their invite links to Branch deep links (so the invite context arrives in the app after install, even when the invitee had to install it first), and MAM GeoDirectory uses the same factory for new-listing links.

When the app opens from a Branch deep link, it posts the link’s payload back to the site (the mam_deep_link_data subaction), where it is stored per device and used by other plugins — for example MAM In-App Purchase Manager attributes purchases to the venue whose link or QR code brought the user in.


Where it’s configured

Everything lives on one page: Local App Setup → Universal Link.

Section Settings
iOS Universal Links iTunes Team ID, iTunes Bundle ID, New Account URL (the path pattern the app claims; blank = all paths)
Android App Links Digital Asset Links JSON (pasted from the Play Console; validated before saving)
Branch.io (optional) App ID, live/test keys and secrets, link domains, Use Test Keys toggle, App Tracking Permission Message

Saving the page writes the trust files, adds a managed ForceType application/json block to .htaccess (marker-delimited, idempotent), and self-checks that both files are actually served as JSON (failures are logged to the MAM debug log as admin_alert).

Secrets stay home: the Branch live/test secrets are used only server-side and are never included in the app build payload — only the publishable keys and link domains are.


Data it stores

Store Contents Lifecycle
wp_mam_deep_link_data Per-device (pid) key/values delivered via the mam_deep_link_data app subaction One row per device + key; replaced on resubmission. Read by MAM In-App Purchase Manager for venue attribution
Options ios_pn_team_id, ios_pn_app_bundle_id (shared with MAM Main push setup), mam_universal_link_account_url, mam_android_asset, mam_universal_link_tracking_message, branch_* Plugin-owned options and the table are removed on uninstall; shared options and the published trust files are preserved

Good to know

  • Single-site: the trust-file and .htaccess writers assume a standard single-site install; on multisite they write to the shared web root.
  • HTTPS is required by both Apple and Google for universal/app links.
  • Deleting the plugin does not delete the published trust files — live apps depend on them. Remove them manually if the apps are retired.

  • Set up iOS universal links
  • Set up Android App Links
  • Set up Branch.io deep links
  • Hook: mam_universal_link_get_branch_link
  • Hook: the mam_deep_link_data endpoint and filters

Metadata

Field Value
Article type Plugin Overview
Plugin slug mam-universal-link-manager
Applies to plugin version 26.24.1+
Category Plugin Reference
Depends on MAM Main
Works with MAM GeoDirectory (Branch links for new listings), MAM In-App Purchase Manager (venue attribution), Branch.io (optional)
Hooks exposed mam_universal_link_enabled, mam_universal_link_get_branch_link, mam_universal_link_accept_deep_link_data, mam_universal_link_deep_link_data, mam_universal_link_deep_link_data_reply
Last verified 2026-06-12
Contents

    Need Support?

    Can't find the answer you're looking for? Don't worry we're here to help!