Skip to main content

Native iOS Messenger App for WordPress

WebSocket Version Guide
This functionality available only with WebSocket Version
Compatibility
This feature compatible with Better Messages 2.6.0 or higher

iOS application feature allows you to generate native iOS messenger application for your website, which allows you to send push and call notifications and can be published to the Apple App Store.

Example of such application here: https://apps.apple.com/us/app/wordplus-messenger/id1598803821?platform=iphone

Branded iOS messenger app generated with Better Messages

Requirements#

  • Apple Developer Program Account#

    To be able to generate and publish iOS application, you need to have paid (99 USD /year) Apple Developer Program Account.

  • iOS Device#

    To be able to build an iOS application, you need to have at least one active iOS device added to Apple Developer Devices List.

    To add one, open Register a New Device, pick the iOS, iPadOS, tvOS, watchOS, visionOS platform, and give the device a Device Name and its Device ID (UDID). You can also upload a file to register up to 100 devices at once.

    note

    Apple counts a removed device against your device limit until the start of your next membership year, so register deliberately rather than experimentally.

The Overview tab#

Better Messages → Mobile App → Overview checks everything below for you, so you can see what a build still needs before starting one rather than reading it out of a failure.

Each row reads Ready or Missing, and its label links straight to the field that sets it. A missing row explains what it is for — "The app this site builds carries a screen sharing extension — it needs its own App ID with the App Group, or the build cannot be signed" — rather than only naming the gap.

The tab is grouped as:

  • App version — which app revision the build server is on, and whether each platform and build type is carrying it. A plugin update reaches the installed app on its own. A change to the app itself does not, so a row here reading Carries an older app means you need to build again.
  • Before you build — what every build reads, whichever platform it is for: application icon, splash screen, splash screen background, login logo.
  • iOS and Android — the per-platform requirements covered on this page and the Android page.
  • Builds — a shortcut to start one.

A build is ready to start when every row for the platform and type you are building reads Ready.

Mobile App overview tab showing readiness checks for iOS and Android
note

The build server keeps a build's files for 90 days and then deletes them — download or submit them within that time.

How an update reaches an installed app#

There are two separate paths, and only one of them goes through the App Store.

Plugin updates arrive on their own. The app carries the site's scripts, styles and settings rather than baking them in, so updating Better Messages on the site updates every installed copy. What the member sees depends on what changed:

What the update changedWhat the app does
Settings onlyApplied live, in place. No prompt, no restart
StylesheetsSwapped in immediately. No prompt
Application codeA notice reads "A new version of the application has been downloaded." with an Update now action that restarts the app into it

Dismissing that notice costs nothing — the downloaded version is already stored, and it starts being used at the next launch whether the member tapped Update now or not.

App updates need the store. Anything built into the shell itself — the icon, the splash screen, the App ID, a Capacitor plugin, a native call or push change — only reaches members through a new build that you submit. Once per launch the app asks whether a newer build of itself is published. If one is, a notice reads "A new version of the app is available in the App Store." with an Update action that opens the store page. Dismissing it snoozes that particular version for 24 hours.

This is the same split the Overview tab's App version rows describe: a row reading Carries an older app means the store copy is behind, and no amount of updating the plugin will fix it.

App branding#

Better Messages → Mobile App → General holds the assets every build is made with, whichever platform it is for. These are the Before you build rows on the Overview tab.

Application#

FieldRequirement
Application iconPNG, exactly 1024×1024, no transparency and no rounded corners — the platforms round it themselves
Splash screenPNG, exactly 2732×2732. It is cropped to each screen, so keep the artwork in the middle
Splash screen backgroundFills what the crop leaves over on a screen of a different shape, so it has to match the image background exactly. A build needs it set even when the artwork fills the screen
The Application section on the Mobile App General tab, with the icon, splash screen and splash screen background

Login screen#

The first screen the app shows anyone who is not signed in.

FieldRequirement
LogoPNG or SVG with a transparent background
Logo heightThe tallest the logo is drawn on the login screen
Terms & Conditions URLLinked under the login form. Apple requires one for an app that accepts user content
The Login screen section on the Mobile App General tab

Connection to Apple Developer Account#

After you have Apple Developer Program Account, to be able to generate Better Messages iOS app, you need to connect Better Messages to your App Store Connect API.

  1. Go to App Store Connect and login with your Apple Developer Account.

  2. Go to App Store Connect API section.

  3. Under the Team Keys section, click on + button to create new key.

    App Store Connect API Add New Key
  4. Generate API Key with the Admin access, like at the screenshot:

    App Store Connect Generate API Key
  5. After you generate the key, you will see the Key ID, Issuer ID and Download API Key button. Click on the Download API Key button to download the key. It is only possible to download the key once, so make sure to store it in a safe place.

    App Store Connect Generated API Key

    You will need these values to connect Better Messages to your App Store Connect API.

  6. Navigate to your website WP Admin → Better Messages → Mobile App → iOS. Under App Store Connect, upload the downloaded key to API key (.p8), fill in the Key ID (ten characters, shown beside the key you created) and the Issuer ID (one per account, at the top of the Integrations page), then press Connect.

    Better Messages iOS Connect
  7. If everything is done correctly, Status turns to a green Connected, the Key ID and Issuer ID are shown back to you, and the rest of the tab unlocks. Check again re-tests the connection, and Disconnect removes the key.

    App Store Connect showing a connected status in Better Messages

Configure Apple Development Team ID#

  1. Go to Apple Developer Account and login with your Apple Developer Account.

  2. Scroll down to the Membership details section and copy the Team ID.

    app-store-team-id.png
  3. Navigate to your website WP Admin → Better Messages → Mobile App → iOS and fill the Team ID under Developer account.

    Team ID field under Developer account in Better Messages

Push notifications key#

Without a push key the app installs and runs, but receives no notifications. One key serves every app on the team, for both development and production — you only do this once.

  1. Go to Register a New Key in the Apple Developer portal.

  2. Give the key a Key Name (no special characters such as @ & * ' ").

  3. Tick Apple Push Notifications service (APNs) and press its Configure button.

  4. Set Environment to Sandbox & Production, and leave Key Restriction on Team Scoped (All Topics). Press Save.

    This choice is permanent

    Apple states plainly that "the APNs configuration for accessible environment and key restriction type can't be changed once saved". The Environment field defaults to Sandbox, which only covers development builds — a key saved that way will not deliver notifications to your App Store build, and the only fix is to create another key.

  5. Press Continue, then Register.

  6. Download the .p8 file. Apple lets you download it once.

  7. Note the Key ID shown beside the key — you need it in the next step. It is also listed on the Keys page, along with the APNs config and environment you chose, so you can check an existing key without recreating it.

  8. In WP Admin → Better Messages → Mobile App → iOS, scroll to Push notifications and press Upload a key.

    The Push notifications section on the iOS tab, showing the push key state
  9. Enter your Team ID, the Key ID from the previous step, and upload the .p8 file.

    The Upload push key dialog asking for Team ID, Key ID and the .p8 file

The row then reads Uploaded. To rotate the key later, the same button becomes Replace the key.

Development & Production Builds#

To generate Better Messages iOS App Build, its required to configure for each type of build separately:

  • App name
  • App ID
  • Notification service App ID
  • Screen sharing App ID, if you want screen sharing in calls
iOS development build settings in Better Messages

Once an App ID is selected, Better Messages reads its capabilities back from Apple and lists them under the field — so you can see that Push Notifications, Communication Notifications, Time Sensitive Notifications and Associated Domains are actually enabled on it, rather than finding out from a failed build.

App name#

This name will be used as primary mobile application name. Application name is limited to 30 characters, but only 12 characters will show under the icon at the mobile device applications list.

App ID#

The App ID is the unique identifier for your application.

It must be unique and match the application identifier in the Apple Developer Account.

It is recommended to use the reverse domain name notation e.g.:

Development build Application Identifier - com.yoursitename.messenger.dev

Registering Application Identifiers#

  1. Go to Apple Developer Account and login with your Apple Developer Account.

  2. Go to Identifiers section and click on + button to create a new identifier.

    app-store-create-identifier-1.png
  3. Select App IDs and press Continue.

    app-store-create-identifier-2.png
  4. Select App when asked for the type of identifier and press Continue.

    app-store-create-identifier-3.png
  5. Fill the Description field with your application name and fill the Bundle ID field with your application identifier (e.g. com.yoursitename.messenger).

    app-store-create-identifier-4.png
  6. The following capabilities must be enabled:

    • Associated Domains
    • Push Notifications
    • Communication Notifications
    • Time Sensitive Notifications
  7. Press Register button to create the identifier.

  8. After the identifier is created, you will need to go to Better Messages settings and press refresh list button to get the new identifier list, then select the identifier which is applicable for your development build.

    app-store-create-identifier-5.png

Screen sharing App ID#

Sharing a screen from the app runs in a separate broadcast extension, which needs an Application Identifier of its own and an App Group shared with the app. Skip this if you do not need screen sharing in calls — the rest of the app works without it.

  1. Repeat the steps for App ID for a second identifier. Its Bundle ID must start with your app's Bundle ID followed by a dot — Xcode refuses to embed an extension otherwise, and Better Messages stops the build before it starts if it does not. Use .broadcast: com.yoursitename.messenger gives com.yoursitename.messenger.broadcast.

  2. Enable the App Groups capability on it. That is the only capability this identifier needs.

  3. Enable App Groups on your main application identifier too. Both sides of a group have to declare it before the extension can hand frames to the app, and the build checks both — a missing one fails with "App Groups is missing on: …".

  4. Register the group itself under Identifiers → App Groups.

    Name it after the app, not the extension

    The group is group. followed by the app's Bundle ID for the build type you are setting up — for com.yoursitename.messenger that is group.com.yoursitename.messenger. It is not named after the .broadcast identifier, even though that is the one you enable the capability on.

  5. Back in Better Messages, press Refresh beside Screen sharing App ID and select the new identifier. Once it is selected the field confirms ✓ APP_GROUPS and prints the exact group name it expects, as "This App ID needs the App Group" followed by a copyable value — worth checking it against what you registered.

    The Screen sharing App ID field with the App Groups capability confirmed and the expected App Group name shown

If the picker reports missing capabilities instead of a green tick, enable them on that App ID in the Apple Developer portal and press Refresh again.

Each build type needs its own App Group

The group name is written into the app's entitlements when the build is compiled, as group. followed by the Bundle ID of the app being signed, and the app reads it back the same way at runtime. A Development build and a Distribution build are signed with different Bundle IDs, so they read different groups. Register one for each:

Build typeApp Bundle IDApp Group to register
Developmentcom.yoursitename.messenger.devgroup.com.yoursitename.messenger.dev
Distributioncom.yoursitename.messengergroup.com.yoursitename.messenger

Assign each group to that build type's app identifier and its .broadcast identifier — both sides have to carry it.

Each Screen sharing App ID field prints the group for its own half of the page: the one under Development is built from the Development App ID, the one under Distribution from the Distribution App ID. Copy the value shown beside the field you are filling in. A build signed without its own group still installs, but screen sharing is simply absent from calls.

note

Adding a capability invalidates that identifier's existing provisioning profiles. Nothing has to be done about it — the next build regenerates them.

Notification service App ID#

Please repeat all the steps for App ID but add the suffix to the Bundle ID with .notifications.

For example, if your main application bundle ID is com.yoursitename.messenger.dev, then the Notification Service Identifier should be com.yoursitename.messenger.dev.notifications.

The notification service does not require any capabilities to be enabled. Like the screen sharing identifier, its Bundle ID must start with the app's Bundle ID followed by a dot — the build refuses to start otherwise, because Xcode will not embed an extension whose identifier sits outside the app's.

Distribution#

The Distribution section below Development carries exactly the same four fields — App name, App ID, Notification service App ID and Screen sharing App ID — and they are configured the same way. Use identifiers without the .dev suffix, since these are the ones that go to the App Store:

DevelopmentDistribution
com.yoursitename.messenger.devcom.yoursitename.messenger
com.yoursitename.messenger.dev.notificationscom.yoursitename.messenger.notifications
com.yoursitename.messenger.dev.broadcastcom.yoursitename.messenger.broadcast
The Distribution section on the iOS tab, with the same four fields as Development

You only need to fill in the section for the build type you are actually making. The Overview tab marks rows for the other one as missing, which is expected until you build it.

Application Builds#

Once the settings are in place, go to the Builds tab and press New build.

The Builds tab in Better Messages, listing previous builds with their status

The flow asks two questions:

  1. Platform — the store the build is made for: iOS or Android.

    Choosing the platform for a new build
  2. Build type — Development installs on registered devices, Production goes to the store.

    Choosing the build type, with the note about registered devices
  3. Better Messages then shows a Create New Build summary of what the build will be made with — site ID, platform, domain, API URL, type and the app's own settings — so you can read it back before starting. Press Create Build to send it to the build server.

    The Create New Build summary listing what the build is made with

If anything required is still missing, this screen says so instead of showing the summary, and the build cannot be started until you fix it.

Two different device lists

A development build installs only on devices registered in your Apple Developer account. Register them before building. The Devices tab in Better Messages is a different list — it shows devices already signed in to the app, not the ones a build is signed for.

Development Build#

Development build is used for testing purposes and can be installed only to iOS devices, which were added to your Apple Developer Account Devices List.

QR code to install the iOS development build on a registered device

You can install the development build to your iOS device by scanning QR code with camera.

Production Build#

Production build is only possible to upload to App Store Test Flight.

There you will be able to test by users which are added to your Test Flight testers list or submit the application to the App Store for review.

iOS production build ready to upload to App Store TestFlight

Store screenshots#

Better Messages → Mobile App → Screenshots generates the screenshots for your App Store listing, at the exact pixel sizes Apple accepts, without you having to run the app and capture them by hand.

Beta — added in 3.0

Screenshot generation is new. The files are the right size and format, but check each one before you upload it — a screen the generator renders badly is still a screen a reviewer sees.

What to show — pick from Inbox, Conversation and Group chat. Each screen becomes one screenshot per device size, and they appear on the listing in the order shown here. Each carries a caption drawn on the framed version, which you can edit or clear.

Sizes — both stores reject a file that is not one of their exact sizes, so each is written at the size named:

SizePixels
iPhone 6.9"1290 × 2796
iPad 13"2064 × 2752

The App Store takes 1 to 10 screenshots per size and scales every smaller iPhone and iPad from these, so those two sizes cover the whole listing.

Framing — under Versions you can generate a plain capture, a framed version, or both. A plain capture is what the app really looks like. A framed one reads better at the size a store page shows it. The framed version has three settings of its own:

SettingWhat it does
BackgroundTwo colours. Set both to the same value for a flat background, or different ones for a gradient
Caption colourThe colour the caption is drawn in
Device outlineDraws a generic rounded bezel around the screen. Apple does not allow a frame that imitates a specific device, so the bezel is deliberately generic
The Screenshots tab, with the screens to show, the store sizes and the framing options
Keep the tab in front while it runs

Generating starts the messenger off-screen and photographs it at each size, in the browser tab you started it from. Navigating away before it finishes cancels the run — and switching to another tab stalls it, because browsers stop painting a background tab and each shot needs a frame to be drawn. Leave the Screenshots tab in the foreground until the count reaches the end.

The shots are held in the page, not on the server: the Download buttons appear only in the result list after a run, and reloading the tab discards them. Download the ZIP before you navigate away, or you will have to generate again.

Devices#

Better Messages → Mobile App → Devices lists every device that has registered with your site from the app — searchable and paginated.

ColumnWhat it shows
UserThe WordPress user signed in on that device
DeviceModel and OS, marked Simulator where applicable
ApplicationWhich build it is running — hover for the application identifier
NotificationsSubscribed or Not Subscribed for push
Last ActiveWhen the app last checked in

It is the quickest way to answer "why is this user not getting push notifications" — a device showing Not Subscribed never registered for them.

The Devices tab listing registered devices with their push subscription state

This list is not the Apple Developer devices list. It shows devices that have signed in to your app. The Apple list decides which devices a development build can be installed on at all.