
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
appsonair-react-native-applink
Advanced tools
A self-hosted dynamic link service for app download tracking, deep linking, and engagement analytics.
AppsOnAir-react-native-AppLink enables seamless handling of deep links and in-app routing within your React Native app. With simple integration, you can configure, manage, and act on links directly from the web dashboard in real time. For more details, refer to the documentation.
Note: For comprehensive instructions on migrating Firebase Dynamic Links to AppLinks, refer to the documentation.
Install the AppsOnAir React Native AppLink package using npm:
npm install appsonair-react-native-applink
After installation, navigate to your iOS project directory and install the native dependencies using CocoaPods:
cd ios
pod install
cd ..
Add the following <meta-data> tag to your application’s AndroidManifest.xml file inside the <application> tag:
android:name is set to "AppsonairAppId"android:value with your actual AppId provided by AppsOnAir</application>
...
<meta-data
android:name="AppsonairAppId"
android:value="********-****-****-****-************" />
</application>
Add the following <intent-filter> inside the <activity> tag of your main activity in AndroidManifest.xml:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="your-domain.com"
android:scheme="https" />
</intent-filter>
If you're using a custom URI scheme, add this additional <intent-filter> block under the same activity:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="your-domain.com"
android:scheme="your-scheme" />
</intent-filter>
Update your MainActivity.kt to handle incoming deep links by overriding the onNewIntent method.
Update your MainActivity.kt to handle incoming deep links by overriding the onNewIntent method.
Make sure the following imports are present at the top of your MainActivity.kt:
import android.content.Intent
import com.appsonairreactnativeapplink.AppsonairReactNativeApplinkModule
import com.facebook.react.ReactApplication
In your MainActivity.kt class (which should extend ReactActivity), override the onNewIntent method as shown below:
class MainActivity : ReactActivity() {
...
...
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
val reactContext = (application as? ReactApplication)
?.reactNativeHost
?.reactInstanceManager
?.currentReactContext
if (reactContext != null) {
reactContext
.getNativeModule(AppsonairReactNativeApplinkModule::class.java)
?.onNewIntent(intent)
}
}
}
<string> value with your actual AppsOnAir AppId<key>AppsonairAppId</key>
<string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string>
To support Universal Links, create or edit the YOUR_PROJECT.entitlements file and add the following configuration:
<!-- If Using Universal Links -->
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:YOUR_DOMAIN</string> <!-- Replace with your actual domain -->
</array>
Note: After configuring the Associated Domain for Universal Links, it may take up to 24 hours for the changes to propagate and become active. The setup and verification process is handled by Apple.
To support a Custom URL Scheme, add the following to your app’s Info.plist file:
<!-- If Using Custom Url Schema -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>YOUR_URL_NAME</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_CUSTOM_URL_SCHEME</string> <!-- Replace with your custom URL scheme -->
</array>
</dict>
</array>
Replace YOUR_URL_NAME with a descriptive name for your app, and YOUR_CUSTOM_URL_SCHEME with the scheme you want to use.
To handle both Universal Links and Custom URL Schemes, add the following methods to your AppDelegate.swift file:
// Step 1: Import AppsOnAir_AppLink
import AppsOnAir_AppLink
...
// Step 2: AppLink Class instance create
var window: UIWindow?
let appLinkService = AppLinkService.shared
...
// Step 3: Handle AppLink Service
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL else {
return false
}
appLinkService.handleAppLink(incomingURL: url)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
appLinkService.handleAppLink(incomingURL: url)
return true
}
Before handling any deep links, you need to initialize the AppsOnAir AppLink SDK. This is typically done in your app’s entry point — such as inside a top-level component or during app startup.
import React, { useEffect } from 'react';
import { initializeAppLink } from 'appsonair-react-native-applink';
const App = () => {
useEffect(() => {
// Initialize AppLink on app startup
initializeAppLink();
}, []);
return (
// your JSX
);
};
Use onDeepLinkProcessed to listen for incoming deep links after initialization. This allows you to respond to navigation events or extract data from the link.
import React, { useEffect } from 'react';
import {
initializeAppLink,
onDeepLinkProcessed,
} from 'appsonair-react-native-applink';
const App = () => {
useEffect(() => {
initializeAppLink();
// Subscribe to deep link events
const sub = onDeepLinkProcessed(event => {
console.log(`✅ Processed:\n${JSON.stringify(event, null, 2)}`);
});
// Cleanup on unmount
return () => {
sub?.remove();
};
}, []);
return (
// your UI rendering deepLinkResult
);
};
Use onReferralLinkDetected to listen for referral detected after initialization. This allows you to respond to navigation events or extract data from the link.
import React, { useEffect } from 'react';
import {
initializeAppLink,
onReferralLinkDetected
} from 'appsonair-react-native-applink';
const App = () => {
useEffect(() => {
initializeAppLink();
const sub = onReferralLinkDetected((event) => {
console.log(`✅ Referral:\n${JSON.stringify(event, null, 2)}`);
});
return () => {
sub?.remove();
};
}, []);
return (
// your UI rendering deepLinkResult
);
};
Use createAppLink to programmatically generate a New AppLink from your React Native app by passing a structured set of parameters.
import React, { useState } from 'react';
import { Alert, Button, TextInput, View } from 'react-native';
import {
createAppLink,
type AppLinkParams,
type CreateAppLinkResponse,
} from 'appsonair-react-native-applink';
const App = () => {
const [linkParams, setLinkParams] = useState<AppLinkParams>({
name: '',
url: '',
urlPrefix: '', // Replace with your actual domain prefix
iosFallbackUrl: '',
androidFallbackUrl: '',
shortId: '',
isOpenInAndroidApp: true,
isOpenInBrowserAndroid: false,
isOpenInIosApp: true,
isOpenInBrowserApple: false,
});
const handleCreateLink = async () => {
try {
const result: CreateAppLinkResponse = await createAppLink(linkParams);
if ('error' in result) {
throw new Error(result.error);
}
if ('status' in result && result.status !== 'SUCCESS') {
throw new Error(result.message);
}
if ('data' in result) {
const shortUrl = result.data.shortUrl;
Alert.alert('AppLink Created', shortUrl);
} else {
throw new Error(
result.message ?? 'No data returned from createAppLink'
);
}
} catch (err: any) {
console.log(err);
Alert.alert('Error Creating Link', err.message || 'Unknown error');
}
};
return (
<View>
<TextInput
placeholder="Enter URL"
value={linkParams.url}
onChangeText={(text) => setLinkParams({ ...linkParams, url: text })}
/>
<Button title="Create AppLink" onPress={handleCreateLink} />
</View>
);
};
Use getReferralInfo to retrieve any referral data passed through a deep link.
import { Button } from 'react-native';
import { getReferralInfo } from 'appsonair-react-native-applink';
const App = () => {
const handleReferralDetails = async () => {
try {
const info = await getReferralInfo();
console.log('Referral Info', JSON.stringify(info, null, 2));
} catch (err) {
console.log('Error', JSON.stringify(err, null, 2));
}
};
return <Button title="Get Referral Info" onPress={handleReferralDetails} />;
};
FAQs
A self-hosted dynamic link service for app download tracking, deep linking, and engagement analytics.
We found that appsonair-react-native-applink demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.