Skip to content

Release v7.0.2 - #702

Merged
al-af merged 129 commits into
masterfrom
development
Aug 26, 2026
Merged

Release v7.0.2#702
al-af merged 129 commits into
masterfrom
development

Conversation

@al-af

@al-af al-af commented Aug 26, 2026

Copy link
Copy Markdown
Collaborator

Major breaking release. See CHANGELOG.md and MIGRATION.md.

al-af and others added 30 commits May 19, 2026 10:44
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.
al-af and others added 26 commits August 24, 2026 14:35
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>
… 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
@al-af
al-af requested a review from Kobikg78 August 26, 2026 08:03
@al-af al-af self-assigned this Aug 26, 2026
@al-af
al-af merged commit 7be8caa into master Aug 26, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants