name: plugin-api-change description: Safely implement or modify a Unity plugin API in the AppsFlyer Unity plugin, including C# API, Android Java bridge, and iOS Objective-C bridge changes.
Plugin API Change
Use this skill when adding, removing, or changing a Unity plugin API.
Goal
Make a safe API change across all plugin layers while preserving backward compatibility where possible.
Workflow
- Identify the public C# API being changed in
Assets/AppsFlyer/AppsFlyer.cs. - Trace the full path: C# API →
AppsFlyerAndroid.cs(Android) |AppsFlyeriOS.cs(iOS) → Native bridge - Verify whether the API already exists in some form.
- Check whether the change affects: method signatures, argument mapping, callback behavior, event payload shape, Android/iOS parity.
- Implement changes in all required layers.
- Check whether tests or example code must be updated.
- Summarize compatibility risk and missing validation.
What to Check
C# layer
AppsFlyer.cs— public API entry pointAppsFlyerAndroid.cs— Android delegation (usesAndroidJavaClass/AndroidJavaObject)AppsFlyeriOS.cs— iOS delegation (uses[DllImport("__Internal")])#if UNITY_IOS/#if UNITY_ANDROIDguards- Assembly definition (
.asmdef) boundaries — do not break - Namespace
AppsFlyerSDK— do not change
Android bridge
AppsFlyerAndroidWrapper.java— Java bridge method- Mapping to AppsFlyer Android SDK
- Threading safety
iOS bridge
AppsFlyeriOSWrapper.mm— Objective-C++ bridge function- Mapping to AppsFlyer iOS SDK
- Delegate/callback wiring
Output Format
Return:
- Summary
- C# API impact
- Android impact
- iOS impact
- Assembly definition impact
- Compatibility risk
- Tests to add or update
- Validation steps
Rules
- Keep Android and iOS behavior aligned unless a platform difference is intentional.
- Do not silently break the public C# API.
- Both billing library variants must remain buildable after the change.
- Do not stop at C#-only changes if native bridge work is required.