Release v7.0.2 - #702
Merged
Merged
Conversation
This ensures that the `publish-final-release` job in the CI workflow only proceeds if the workflow execution has not been explicitly cancelled. This prevents partial or unintended final release publishing actions.
Adds react-doctor devDependency and a doctor npm script, a doctor.config.json tuned for this repo, and the react-doctor and doctor-explain skills under .claude/skills.
With the plugin linked via file:.., the plugin root ships its own react-native, so the plugin NativeEventEmitter could bind to a second event bus and deep-link / conversion callbacks would silently never fire. Pin react-native and react to the example app copy and block the plugin-root copies. Local dev only.
Reads devKey and appId from .env via react-native-dotenv instead of a placeholder devKey, moves logAdRevenue to a single post-init call instead of firing on every in-app event, and removes an invalid PurchaseConnectorConfig type annotation in PCInit.
Populates the iOS AppIcon.appiconset and regenerates the Android launcher icons at all mipmap densities.
…ping FlatList-based product list with memoized cards and refreshed imagery, a floating-cart overlap fix, cart lines collapsed by quantity, and a confetti plus purchase-summary on checkout.
Full-width hero image, left-aligned details, a sticky add-to-cart button, and a discount badge for deep-link offers.
Replaces the external placeholder image with an on-brand card: emoji badge, welcome copy, and a start-shopping button.
Unrelated tooling addition, not part of the RPC rewrite.
Adds MIGRATION.md and documents the new executeRpc bridge contract.
Removes vendored per-feature ObjC headers/RNAppsFlyer.m in favor of RNAppsFlyer.mm dispatching to RNAppsFlyerImpl.swift.
Converts RNAppsFlyerModule/Package to Kotlin, adds RpcInitGate to buffer listener registration until init resolves, and vendors the plugin_bridge + af-android-sdk aars.
index.js now routes every native call through callRpc/callRpcVoid/callRpcWithCallback -> NativeAppsFlyer.executeRpc.
…nd Kotlin, drop legacy Buck/bundle scaffolding Removes vendored main.jsbundle and BUCK build files that predate autolinking; migrates AppDelegate/MainActivity/MainApplication to Swift/Kotlin to match the New Architecture bridge.
…llback Addresses PR #693 review comments (pazlavi). - Delete RpcInitGate.kt + RpcInitGateTest.kt; RNAppsFlyerModule.kt's executeRpc dispatches every RPC immediately, no gate/queue - Remove RNAppsFlyerImpl.swift's initCompleted/pendingRegistrations buffer; executeRpc dispatches immediately - Remove Android's scheduleSessionReadyFallback (synthesized onSessionReady after a timeout) -- per review, a callback that never fires is a native bug to investigate, not something to paper over; this fallback had already caused a double-fire race - android/build.gradle: failOnNoDiscoveredTests = false (module has zero unit tests left now that it's a pure passthrough) - Update bridge-patterns.md §4, native-android.md, native-ios.md §4, testing.md, CLAUDE.md to document the removal and stop contradicting it Verified: ./gradlew :react-native-appsflyer:test green, npm test JS suite green (92/92 in index.test.js)
Updates the `blockDir` regex in `metro.config.js` to prevent ReDoS vulnerabilities through improved escaping. Forces an upgrade of `brace-expansion` via `overrides` to mitigate known transitive dependency vulnerabilities.
Removes the `react-doctor` dependency as it is no longer required for TurboModule core development.
Updates the `blockDir` regex in `metro.config.js` files to prevent ReDoS vulnerabilities through improved escaping and anchoring. Forces an upgrade of `fast-uri` via `overrides` to mitigate known transitive dependency vulnerabilities.
Relocates the `fast-uri` override from the root `package.json` to the `demos/appsflyer-expo-app/package.json`. This ensures the override is applied only where specifically needed by the demo app, preventing potential unintended side effects on other packages in the monorepo.
setUserEmail/setUserEmails, getAppsFlyerUID/getSDKVersion unwrapping, mediation network wire values, callback error forwarding, and iOS success-envelope unwrapping to match Android.
Regenerates fixtures from the native iOS/Android RPC source so the JS layer's param keys can be checked against ground truth (npm run contract).
Replaces vendored android/libs/*.aar + flatDir resolution with com.appsflyer Maven coordinates, and AppsFlyerFramework with AppsFlyerRPC 7.0.12 in the podspec.
Updates init/startSdk flow, cold-start deep link forwarding, stop() callback logging, and unused useMemo/useCallback and layout fixes in the bare RN demo; adds rpcCatalog.js test catalog to the expo demo.
AppsFlyerRPC 7.0.12 to 7.0.13, af-android-plugin-bridge pinned to 7.0.12 independent of the af-android-sdk-bom line, js-core-plugin dependency range widened to ^7.0.14.
…ugin 7.0.14 js-core-plugin now owns the mediationNetwork wire-value mapping and the fbLoginId precision fix internally, so the local overrides in index.ts are dead weight. Also trims now-redundant comments across the touched native files and quiets a duplicate console.log in the Expo Android config plugin.
Assert against the new dependency's actual behavior instead of the removed local overrides; add version-sync.test.js to catch drift between the 3 version-surface literals.
Drop the stale ios_files.png doc asset alongside the text updates.
promote-release.yml now rewrites the CHANGELOG heading on promotion and blocks on an unfilled TODO placeholder; release.yml prefixes RC tags with v and makes android_plugin_bridge_version optional.
wait_for_qa_marker now polls process liveness after a grace period so a launch-time crash aborts early instead of burning the full timeout; log collection widened to catch AndroidRuntime/FATAL EXCEPTION crash tags.
Docs/RN_API.md predated the js-core-plugin single-params-object convention -- nearly every method still showed positional-argument signatures/examples. Rewrote all ~80 method sections to the real params-object calling convention, verified against generated/methods.d.ts, appsflyer-sdk.d.ts, and rpc-wire-contract.test.js. - Renamed unregisterForDeepLink -> unregisterDeeplinkListener (Android-only) - Added missing sections: handlePushNotification (iOS), onPause (Android), collectDataFromLauncherActivity (Android), handleOpenURL, handleOpenUrl, continueUserActivity, handleLaunchOptions (all iOS-only) -- replaces a section that incorrectly claimed these weren't JS-callable - Rewrote sendPushNotificationData to its actual Android-only shape - Fixed registerConversionListener/registerDeepLinkListener to the real callbacks-object shape, removed a false 'returns unregister function' claim - setPluginInfo intentionally left undocumented -- not on the public SDK class, reported internally via PluginIdentity Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…f a bare unsubscribe fn
… facade Matches the existing continueUserActivity/handleOpen pattern -- one import (react_native_appsflyer) now covers the whole AppDelegate, AppsFlyerLib import no longer needed at the app level.
The AppsFlyer SDK now handles initial deep link processing internally, making manual invocation of `performDeepLinking` from `Linking.getInitialURL()` unnecessary in the demo app.
Update all occurrences of `appsFlyer` to `AppsFlyer` for the main SDK export and instance name across documentation and test files. This aligns the casing with the official branding and the `@AppsFlyer-sdk/js-core-plugin` package name for consistency.
This commit updates and clarifies the internal documentation (`.claude/rules/`) to reflect the latest RPC module and TurboModule architecture. Key changes include: * **Condensing resolved issues:** Many entries in `known-issues-kb.md` are simplified, retaining only root causes relevant to current constraints and removing verbose explanations for issues that are now fixed. * **Streamlining architectural details:** Descriptions of bridge patterns, Expo config, and native module rules are made more concise and accurate. * **Removing outdated information:** Historical context and details no longer relevant to the current SDK behavior or plugin responsibilities have been pruned. This improves readability and maintainability by ensuring the documentation accurately reflects the current state of the SDK and its interactions.
Reflects changes in the SDK where `registerDeepLinkListener` and `registerConversionListener` now accept an object with named callback properties (e.g., `onDeepLinking`, `onConversionDataSuccess`) instead of direct callback arguments. This ensures documentation provides correct usage examples. DELIVERY-128515
The `AFPurchaseType.ONE_TIME_PURCHASE` value was previously `one_time_purchase` (snake_case), matching Android's wire format. This caused `validateAndLogInAppPurchase` to fail for one-time purchases on iOS, which expects `oneTimePurchase` (camelCase) from the `publicApi` contract. This commit corrects the enum value to `oneTimePurchase`. Additionally, this commit includes the following improvements: - Enhanced the release workflow's input validation with more specific error messages for missing variables. - Improved resilience for `AppsFlyerPurchaseConnector.OnReceivePurchaseRevenueValidationInfo` by adding error handling around the callback. - Pinned the `@appsflyer-sdk/js-core-plugin` dependency to an exact version. DELIVERY-128515
…rpc-module-update chore(release): 7.0.2 — RPC bridge cleanup, PurchaseConnector fix, js-core-plugin 7.0.14
Updates documentation to reflect the new API signature for various methods (e.g., `init`, `enableDebug`, `logEvent`) which now accept a single object parameter rather than positional arguments. This provides consistency with the latest SDK API design.
… name Updates `@appsflyer-sdk/js-core-plugin` to `7.0.15`. This change standardizes the `unregisterDeeplinkListener` method name to `unregisterDeepLinkListener` across documentation, tests, and demo applications to align with the updated plugin API.
chore: Bump js-core-plugin and standardize unregisterDeepLinkListener name
Kobikg78
approved these changes
Aug 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Major breaking release. See CHANGELOG.md and MIGRATION.md.