/** * This exposes the native AppConsent module as a JS module. * * @packageDocumentation */ import { NativeModules, Platform } from 'react-native'; const LINKING_ERROR = `The package 'appconsent-clear-reactnative' doesn't seem to be linked. Make sure: \n\n` + Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) + '- You rebuilt the app after installing the package\n' + '- You are not using Expo managed workflow\n'; const appConsent = NativeModules.AppconsentClearReactnative ? NativeModules.AppconsentClearReactnative : new Proxy( {}, { get() { throw new Error(LINKING_ERROR); }, } ); /** * This is the main entry point to interact with AppConsent API. * * @example * import AppConsent from 'appconsent-clear-reactnative'; */ export default appConsent as AppConsent; /** * This is the main interface to interact with AppConsent API, it exposes typescript declarations to access Native libraries features. * * @example * import AppConsent from 'appconsent-clear-reactnative'; */ export interface AppConsent { /** * This initializes AppConsent. * @remarks * This method is ASYNCHRONOUS!
* You must call the method with await.
* To ensure proper operation, put the call to this method in a try/catch.
* This method doesn't have a Promise signature
* So it can't be used as such (promiseMethod.then().catch()) * * @param appKey - Your AppKey * @param forceApplyGDPR - force behavior as in a GDPR subject country
* false, let the CMP check whether the user is subject to the GDPR of its region.
* true, it considers the user to be subject to GDPR * @param forceATT - force ATT handling (iOS only) * * @category General Use */ configureWith( appKey: string, forceApplyGDPR: boolean, forceATT: boolean ): void; /** * To display AppConsent by modal on top of your view. * * @remarks * To be notified when the user has entered his consent, don't forget to register with the callback. * * @see {@link AppConsent.consentGiven} * @param force - false, displays the introduction screen as a modal only if necessary (subject to GDPR, consent not entered, consent period exceeded, etc.).
* true, forces the display of the configuration screen (allowing users to enter/modify their consent) * * @category General Use */ present(force: boolean): void; /** * Check if consent must be updated (new gvl version, new consentables…) * * @example * AppConsent.checkForUpdate() * .then((isNeedToUpdate: boolean) => { * console.log('isNeedToUpdate => ' + isNeedToUpdate); * // CMP needs to be displayed again to your users * AppConsent.present(false); * }).catch((err: any) => console.log(err)); * * @category Advanced Use */ checkForUpdate(): Promise; /** * Check if device is GDPR country. * * @returns true if the device is in a country subject to GDPR, false otherwise. * * @category Advanced Use */ isGDPRCountry(): Promise; /** * Check if user gave consent * * @example * AppConsent.consentAlreadyGiven() * .then( success => * console.log("🔥 consentAlreadyGiven => " + success) * ) * * @returns true if consent is given, false otherwise. * * @category Advanced Use */ consentAlreadyGiven(): Promise; /** * Callback when user give its consent. * * @example * AppConsent.consentGiven() * .then((success: boolean) => console.log('consentGiven => ' + success)) * .catch((err: any) => console.log(err)); * * @returns true if user saved their consent preferences. * * @category Advanced Use */ consentGiven(): Promise; /** * Clear consents on NSUserDefaults, DefaultSharedPreference, but not on server. * * @category Advanced Use */ clearConsent(): void; /** * * @param extraId * @returns true if consentable with extraId is allowed, false otherwise. * * @category Advanced Use */ extraConsentableAllowed(extraId: string): Promise; /** * * @param extraId * @returns true if consentable with extraId is allowed, false otherwise. * * @category Advanced Use */ extraVendorAllowed(extraId: string): Promise; /** * Check if floating purpose is allowed. * * @remarks * NOTE: * You need to call checkForUpdate method before calling this method to stay up to date. * * @see {@link AppConsent.checkForUpdate} * * @param extraId * * @category Advanced Use */ extraFloatingPurposeAllowed(extraId: string): Promise; /** * Set consentables status with an iabId. * * @remarks * CAUTION: * Key must be an iabId, not an objectId. * Value must be an Integer: 0 (pending), 1 (allowed), -1 (denied) * * NOTE: * This method doesn’t send request to the server. * * @param values * * @category Advanced Use */ setConsentableConsent(values: {}): Promise; /** * Set consentables status with extraId. * * @remarks * CAUTION: * Key must be an extraId, not an objectId. * Value must be an Integer: 0 (pending), 1 (allowed), -1 (denied) * * NOTE: * This method doesn’t send request to the server. * * @param values * * @category Advanced Use */ setExtraConsentableConsent(values: {}): Promise; // EXTERNAL IDS /** * Retrieve external ids from cache. * * @remarks * NOTE: this only returns the external ids present in the local storage, without checking them out from the backend, external ids are only synchronized after a call to present() or checkForUpdate(). * * @returns String representation of all the external Ids in User Preferences * in the following form : * [:] for an empty value * ["key1": "value1", "key2": "value2"] for a key/value data set * * @category External Ids */ getExternalIds(): Promise; /** * Store a set of external id allong the consent, the ids are synchornised with the consents upon calling present() or checkForUpdate(), so this should be called before calling present() or checkForUpdate(). * * @remarks * NOTE: this overrides previously set ExternalIds in the local storage, but the change won't be synchronized with our backend untill a call to present() or checkForUpdate() is made. * * @returns true * * @param ids * * @category External Ids */ setExternalIds(ids: {}): Promise; /** * Send the external ids you have stored with setExternalIds to the server. * * @remarks * NOTE: the external ids are also saved automatically when calling present(), whether or not the notice is presented, or when calling checkForUpdate(). * Saving ExternalIds with this method doesn't work unless there has been a previous consent registered with present(), so in most cases it is preferable to simply rely on present() or checkForUpdate() to save the ExternalIds. * * @example * AppConsent.setExternalIds({ myCustomID: 'xyz' }) * .then((success: boolean) => * console.log('🔥 setExternalIds => ' + success) * ) * .catch((err: any) => console.log(err)) * * @returns true * * @category External Ids */ saveExternalIds(): Promise; // IOS ONLY /** * @remarks * This is only supported on iOS targets. * * @returns forceATT * * @category iOS App Tracking Transparency */ getForceATT(): Promise; /** * Check if your device supports App Tracking Transparency. * * @remarks * This is only supported on iOS targets. * * @returns true if available, false otherwise. * * @category iOS App Tracking Transparency */ appTrackingIsAvailable(): Promise; /** * Check if App Tracking Transparency has been given. * * @remarks * This is only supported on iOS targets. * * @returns 0 (not given), 1 (given), 2 (not supported) * * @category iOS App Tracking Transparency */ appTrackingAuthorizationGiven(): Promise; /** * Check status of App Tracking Transparency. * * @remarks * This is only supported on iOS targets. * * @returns 0 (failure), 1 (success), 2 (not supported) * * @category iOS App Tracking Transparency */ appTrackingAuthorizationStatus(): Promise; // DEPRECATED /** * @returns true if consentable with objectId is allowed, false otherwise. * * @deprecated * @category Advanced Use */ consentableAllowedByObjectId(id: string): Promise; /** * @param iabId * @param type - 0: purpose, 1: feature, 2: specialFeature, 3: specialPurpose * @returns true if consentable with iabId is allowed, false otherwise. * * @deprecated * @category Advanced Use */ consentableAllowedByIABId(iabId: string, type: number): Promise; /** * @returns true if consentable with iabId is allowed, false otherwise. * * @deprecated * @category Advanced Use */ vendorAllowedByIABId(iabId: string): Promise; /** * @returns true if consentable with iabId is allowed, false otherwise. * * @deprecated * @category Advanced Use */ stackAllowedByIABId(iabId: string): Promise; /** * @returns the configured AppKey. * * @deprecated * @category Advanced Use */ getAppKey(): Promise; /** * @returns forceApplyGDPR * * @deprecated * @category Advanced Use */ getForceApplyGDPR(): Promise; /** * * @deprecated * @category Advanced Use */ getName(): string; /** * * @deprecated * @category Advanced Use */ getConstants(): any; }