@kirz/react-native-toolkit
Version:
Toolkit to speed up React Native development
132 lines (111 loc) • 3.63 kB
text/typescript
import ApphudSdk, {
AndroidApphudAttributionProvider,
IOSApphudAttributionProvider,
} from '@kirz/react-native-apphud';
import { Platform } from 'react-native';
import { Plugin, PluginFeature, PluginsBundle } from '../Plugin';
export class ApphudConnectorPlugin extends Plugin {
readonly name = 'ApphudPlugin';
readonly features: PluginFeature[] = ['IAPReceiptValidator'];
readonly initializationTimeout = 15000;
async initialize(bundle: PluginsBundle) {
// ApphudSdk.setAdvertisingIdentifier(true);
// Send IDFA to Apphud
(async () => {
const idfaPlugin = bundle.get('IdfaPlugin') as any;
if (idfaPlugin?.idfa) {
ApphudSdk.setAdvertisingIdentifier(idfaPlugin.idfa);
}
})();
// Connect AppsFlyer to AppHud
(async () => {
const appsFlyer = (bundle.get('AppsFlyerPlugin') as any)?.instance;
if (!appsFlyer) {
return;
}
const ApphudAttributionProviderAppsFlyer = Platform.select<any>({
ios: IOSApphudAttributionProvider.AppsFlyer,
android: AndroidApphudAttributionProvider.appsFlyer,
});
appsFlyer.getAppsFlyerUID((err: any, uid: any) => {
if (err) {
console.error(err);
return;
}
appsFlyer.onInstallConversionData(async (res: any) => {
try {
if (res.type === 'onInstallConversionDataLoaded') {
await ApphudSdk.addAttribution({
identifier: uid,
data: res.data,
attributionProviderId: ApphudAttributionProviderAppsFlyer,
});
}
} catch (error) {
console.error(error);
}
});
appsFlyer.onInstallConversionFailure(async (res: any) => {
try {
if (res.type === 'onInstallConversionFailure') {
await ApphudSdk.addAttribution({
identifier: uid,
data: {
error: res.data,
},
attributionProviderId: ApphudAttributionProviderAppsFlyer,
});
}
} catch (error) {
console.error(error);
}
});
});
})();
// Connect Facebook to AppHud
(async () => {
const idfaPlugin = bundle.get('IdfaPlugin') as any;
const facebook = (bundle.get('FacebookPlugin') as any)?.instance;
if (!facebook) {
return;
}
const ApphudAttributionProviderFacebook = Platform.select<any>({
ios: 3,
android: AndroidApphudAttributionProvider.facebook,
});
await ApphudSdk.addAttribution({
identifier: null as any,
data: {},
attributionProviderId: ApphudAttributionProviderFacebook,
});
if (idfaPlugin?.idfa) {
facebook.setAdvertiserTrackingEnabled(true);
}
})();
// Connect Branch to AppHud
(async () => {
const branch = (bundle.get('BranchPlugin') as any)?.instance;
if (!branch) {
return;
}
const deviceId = await ApphudSdk.userId();
branch.default.setIdentity(deviceId);
})();
// Connect Firebase to AppHud
(async () => {
const firebase = (bundle.get('FirebasePlugin') as any)?.instance;
if (!firebase) {
return;
}
const appInstanceId = await firebase.analytics.getAppInstanceId();
if (appInstanceId) {
ApphudSdk.addAttribution({
data: {},
attributionProviderId:
Platform.OS === 'ios' ? 4 : ('fireabse' as any),
identifier: appInstanceId,
});
}
})();
}
}