Independent Meta API connections and AppsFlyer S2S event delivery
Connect only the Meta APIs you need, then send selected subscription events to AppsFlyer from the same PNLight project.Meta integration
Connect Meta APIs independentlyConnect the Marketing API for campaigns and spend. Connect the Conversions API for server-side event delivery. Use either API or both. Target URL and click tracking stay in the same account settings. Read the docs.Inspect each delivery attemptWhen delivery fails, account settings show recent Conversions API outcomes. Open an event to see the status, reason, request URL, and HTTP response for that attempt. Read the docs.AppsFlyer integration
Send subscription milestones through S2SMap PNLight subscription lifecycle events to the names you expect in AppsFlyer. Pause delivery without clearing the configuration, then resume it later. Mapped events are sent for users whose attribution includes an AppsFlyer user ID. Read the docs.PNLight adds Remote Config for typed, targeted app settings
Change a feature flag, a line of copy, a limit, or a paywall variant without waiting for the next app release. Local defaults cover first launch and offline sessions.Dashboard
Typed configuration and overridesDefine a base configuration with Boolean, string, number, string-array, and JSON values. Add ordered overrides for campaign, device, OS version, SDK version, or country. Read the docs.Drafts and publishingChanges stay in a draft and do not affect the app until you publish them. Publish the draft after review. To return to an earlier version, restore it into a new draft. Read the docs.SDK updates
Local values in the SDKSwift, React Native, and Flutter apps can supply local defaults, refresh withfetchAndActivate, and read values through typed getters. If a fetch fails, the previous active configuration and local defaults are still available. Read the docs.Remote UI supports multi-screen flows and SDK-owned purchases
A Remote UI placement can guide users through several screens and start a StoreKit purchase. The flow stays in remote configuration, so you do not need separate app code for each screen.Remote UI
Multiple screens in one flowReturn multiple routes in one flow and move between them with PNLight push, replace, present, and dismiss actions.RemoteUiView owns the native navigation stack and modal presentation. Read the docs.Preview and configuration checksStart with a reusable preset, then fill project-specific strings and product IDs through runtime placeholders. Live preview, iPhone device presets, action logs, and simulated purchase outcomes catch problems before the config reaches the app. Read the docs.Purchases through the SDKSchema v3 adds the SDK-owned pnlight.purchase action and an onPurchased callback for refreshing entitlements or navigation afterward. It also brings animated progress bars and numbers. Existing schema v1 and v2 configs remain supported. Read the docs.Native navigation and system feedbackRemote UI accounts for safe areas and scaling variables. Flows can also use haptics, dialogs, and native modal presentation.Product catalog, StoreKit 2 purchases, and event diagnostics
The Products section now includes a catalog for App Store product IDs. The iOS SDK supports StoreKit 2 purchases and restoration, while the Events page shows event data and delivery attempts.Purchases
One catalog per projectKeep each project’s App Store product IDs in Products, with production and QA catalogs separated by project. Remote UI product placeholders can pull IDs from the catalog while PNLight builds a config. Read the docs.StoreKit 2 purchases and restorationThe iOS SDK loads App Store products, completes verified purchases, restores transactions, and checks introductory-offer eligibility. Purchase and restore screens can read the same resulting state.Receipt retries after a purchaseAfter StoreKit verifies a purchase, the app receives success even if PNLight cannot accept the receipt immediately. The SDK retries later, and PNLight can recover the original transaction and subscription history from the saved receipt. Read the docs.Dashboard
Event data and delivery attemptsThe new Events page brings subscription, app, and system events together across all users. Filter the list, then inspect the raw payload, attribution context, and delivery attempt for each integration. Read the docs.PNLight adds Remote UI targeting, App Events analytics, and SDK 0.7.2
Remote UI gained targeting by campaign, device, and SDK version. Analytics added App Events, while SDK 0.7.2 added IDFA refresh and Remote UI cache controls.Dashboard
App Events analyticsThe Analytics → App Events view includes a chart of SDK events and a searchable table. Open an event from the table to inspect its payload or related customer profile. Read the docs.Remote UI targeting and protectionRemote UI placements can now target users by ad campaign, device, OS version, country, and SDK version. Placement settings also include protection modes for secure rendering and capture handling. Read the docs.Test devices for Remote UI QAYou can add test device IDFAs or SDK user IDs from Integration. Test devices can receive Remote UI in test mode, including cases where production targeting or capture protection would normally block the placement. Read the docs.Customer timeline debuggingCustomer profiles now provide more debugging context, including app events, attribution details, test-device state, and Remote UI capture state. Read the docs.SDK updates
SDK 0.7.2The iOS, React Native, and Flutter wrappers are synchronized at version0.7.2. The release improves Remote UI cache behavior, adds ignoreCache, and exposes clearer config-loading errors in wrapper APIs. Read the docs.IDFA refresh after ATTSDKs now expose updateIdfa() so apps can send the granted IDFA after the App Tracking Transparency prompt completes. This is useful when PNLight initializes before ATT authorization. Read the docs.App-open trackingThe SDK now reports repeat app opens after the first install. PNLight uses this signal to keep customer activity fresh and to add system app-open events to timelines.Remote UI cache refreshRemote UI configs are cache-first by default and refresh in the background with ETag requests. Use ignoreCache when QA or state changes require a fresh server response. Read the docs.