Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ repositories {
dependencies {
//noinspection GradleDynamicVersion
implementation 'com.facebook.react:react-native:+' // From node_modules
implementation "io.qonversion.android.sdk:sdk:3.2.7"
implementation "io.qonversion.android.sdk:sdk:3.3.0"
implementation "com.google.firebase:firebase-messaging:21.0.1" // Used for Qonversion.handleNotification compilation
}

Expand Down
22 changes: 22 additions & 0 deletions android/src/main/java/com/reactlibrary/QonversionModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.qonversion.android.sdk.QonversionProductsCallback;
import com.qonversion.android.sdk.UpdatedPurchasesListener;
import com.qonversion.android.sdk.dto.QLaunchResult;
import com.qonversion.android.sdk.dto.QPermissionsCacheLifetime;
import com.qonversion.android.sdk.dto.experiments.QExperimentInfo;
import com.qonversion.android.sdk.dto.offerings.QOffering;
import com.qonversion.android.sdk.dto.offerings.QOfferings;
Expand Down Expand Up @@ -58,6 +59,18 @@ public class QonversionModule extends ReactContextBaseJavaModule {
put("KOCHAVA_DEVICE_ID", QUserProperties.KochavaDeviceId);
put("CUSTOM_USER_ID", QUserProperties.CustomUserId);
put("FACEBOOK_ATTRIBUTION", QUserProperties.FacebookAttribution);
put("FIREBASE_APP_INSTANCE_ID", QUserProperties.FirebaseAppInstanceId);
}};

private static final HashMap<String, QPermissionsCacheLifetime> cacheLifetimeMap = new HashMap<String, QPermissionsCacheLifetime>() {{
put("WEEK", QPermissionsCacheLifetime.WEEK);
put("TWO_WEEKS", QPermissionsCacheLifetime.TWO_WEEKS);
put("MONTH", QPermissionsCacheLifetime.MONTH);
put("TWO_MONTHS", QPermissionsCacheLifetime.TWO_MONTHS);
put("THREE_MONTHS", QPermissionsCacheLifetime.THREE_MONTHS);
put("SIX_MONTHS", QPermissionsCacheLifetime.SIX_MONTHS);
put("YEAR", QPermissionsCacheLifetime.YEAR);
put("UNLIMITED", QPermissionsCacheLifetime.UNLIMITED);
}};

private DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter = null;
Expand Down Expand Up @@ -477,6 +490,15 @@ public void onPermissionsUpdate(@NonNull Map<String, QPermission> map) {
});
}

@ReactMethod
public void setPermissionsCacheLifetime(final String lifetime) {
QPermissionsCacheLifetime cacheLifetime = cacheLifetimeMap.get(lifetime);

if (cacheLifetime != null) {
Qonversion.setPermissionsCacheLifetime(cacheLifetime);
}
}

private void rejectWithError(@NonNull QonversionError qonversionError, final Promise promise) {
String errorMessage = qonversionError.getDescription() + "\n" + qonversionError.getAdditionalMessage();
promise.reject(qonversionError.getCode().toString(), errorMessage);
Expand Down
14 changes: 7 additions & 7 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,9 @@ PODS:
- glog (0.3.5)
- libevent (2.1.12)
- OpenSSL-Universal (1.1.1100)
- Qonversion (2.18.4):
- Qonversion/Main (= 2.18.4)
- Qonversion/Main (2.18.4)
- Qonversion (2.20.0):
- Qonversion/Main (= 2.20.0)
- Qonversion/Main (2.20.0)
- RCT-Folly (2021.06.28.00-v2):
- boost
- DoubleConversion
Expand Down Expand Up @@ -285,8 +285,8 @@ PODS:
- React-jsinspector (0.68.2)
- React-logger (0.68.2):
- glog
- react-native-qonversion (3.3.1):
- Qonversion (= 2.18.4)
- react-native-qonversion (3.3.3):
- Qonversion (= 2.20.0)
- React
- React-perflogger (0.68.2)
- React-RCTActionSheet (0.68.2):
Expand Down Expand Up @@ -525,7 +525,7 @@ SPEC CHECKSUMS:
glog: 476ee3e89abb49e07f822b48323c51c57124b572
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
Qonversion: 307b7f9db2232781d6cd1dd17d25481ab0360c3b
Qonversion: 11af455df897239813c302f9d8916c66515a6335
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
RCTRequired: 3e917ea5377751094f38145fdece525aa90545a0
RCTTypeSafety: c43c072a4bd60feb49a9570b0517892b4305c45e
Expand All @@ -539,7 +539,7 @@ SPEC CHECKSUMS:
React-jsiexecutor: b7b553412f2ec768fe6c8f27cd6bafdb9d8719e6
React-jsinspector: c5989c77cb89ae6a69561095a61cce56a44ae8e8
React-logger: a0833912d93b36b791b7a521672d8ee89107aff1
react-native-qonversion: 835c1e489b77d6c1696b9a0e8736bef6c9c4288b
react-native-qonversion: 174fbec5fb66f77071aa5cc3697ae1f318276fdb
React-perflogger: a18b4f0bd933b8b24ecf9f3c54f9bf65180f3fe6
React-RCTActionSheet: 547fe42fdb4b6089598d79f8e1d855d7c23e2162
React-RCTAnimation: bc9440a1c37b06ae9ebbb532d244f607805c6034
Expand Down
1 change: 1 addition & 0 deletions ios/EntitiesConverter.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSDictionary *)convertError:(NSError *)error;
+ (NSDictionary *)convertAutomationsEvent:(QONAutomationsEvent *)event;
+ (NSNumber *)propertyForString:(NSString *)key;
+ (NSNumber *)permissionsCacheLifetimeForString:(NSString *)key;

@end

Expand Down
18 changes: 17 additions & 1 deletion ios/EntitiesConverter.m
Original file line number Diff line number Diff line change
Expand Up @@ -297,10 +297,26 @@ + (NSNumber *)propertyForString:(NSString *)key {
@"ADJUST_USER_ID": @(QNPropertyAdjustUserID),
@"KOCHAVA_DEVICE_ID": @(QNPropertyKochavaDeviceID),
@"ADVERTISING_ID": @(QNPropertyAdvertisingID),
@"CUSTOM_USER_ID": @(QNPropertyUserID)
@"CUSTOM_USER_ID": @(QNPropertyUserID),
@"FIREBASE_APP_INSTANCE_ID": @(QNPropertyFirebaseAppInstanceId)
};

return propertiesMap[key];
}

+ (NSNumber *)permissionsCacheLifetimeForString:(NSString *)key {
NSDictionary *permissionsCacheLifetimeMap = @{
@"WEEK": @(QNPermissionsCacheLifetimeWeek),
@"TWO_WEEKS": @(QNPermissionsCacheLifetimeTwoWeeks),
@"MONTH": @(QNPermissionsCacheLifetimeMonth),
@"TWO_MONTHS": @(QNPermissionsCacheLifetimeTwoMonth),
@"THREE_MONTHS": @(QNPermissionsCacheLifetimeThreeMonth),
@"SIX_MONTHS": @(QNPermissionsCacheLifetimeSixMonth),
@"YEAR": @(QNPermissionsCacheLifetimeYear),
@"UNLIMITED": @(QNPermissionsCacheLifetimeUnlimited)
};

return permissionsCacheLifetimeMap[key];
}

@end
9 changes: 9 additions & 0 deletions ios/RNQonversion.m
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,15 @@ @implementation RNQonversion
}
}

RCT_EXPORT_METHOD(setPermissionsCacheLifetime:(NSString *)lifetime)
{
NSNumber *lifetimeNumber = [EntitiesConverter permissionsCacheLifetimeForString:lifetime];

if (lifetimeNumber) {
[Qonversion setPermissionsCacheLifetime:lifetimeNumber.integerValue];
}
}

#pragma mark - Private

- (void)purchaseWithId:(NSString *)productId offeringId:(NSString *)offeringId completion:(RCTResponseSenderBlock)completion rejecter:(RCTPromiseRejectBlock)reject {
Expand Down
2 changes: 1 addition & 1 deletion react-native-qonversion.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ Pod::Spec.new do |s|
s.requires_arc = true

s.dependency "React"
s.dependency "Qonversion", "2.18.4"
s.dependency "Qonversion", "2.20.0"
end
14 changes: 13 additions & 1 deletion src/classes/Qonversion.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {NativeEventEmitter, NativeModules} from "react-native";
import {Property, ProrationMode, Provider} from "../enums";
import {PermissionsCacheLifetime, Property, ProrationMode, Provider} from "../enums";
import ExperimentInfo from "./ExperimentInfo";
import IntroEligibility from "./IntroEligibility";
import LaunchResult from "./LaunchResult";
Expand Down Expand Up @@ -478,4 +478,16 @@ export default class Qonversion {
});
RNQonversion.subscribeOnPromoPurchases();
}

/**
* Permissions cache is used when there are problems with the Qonversion API
* or internet connection. If so, Qonversion will return the last successfully loaded
* permissions. The current method allows you to configure how long that cache may be used.
* The default value is {@link PermissionsCacheLifetime.MONTH}.
*
* @param lifetime desired permissions cache lifetime duration
*/
static setPermissionsCacheLifetime(lifetime: PermissionsCacheLifetime) {
RNQonversion.setPermissionsCacheLifetime(lifetime);
}
}
12 changes: 12 additions & 0 deletions src/enums.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export enum Property {
CUSTOM_USER_ID = 5,
FACEBOOK_ATTRIBUTION = 6,
ADVERTISING_ID = 7,
FIREBASE_APP_INSTANCE_ID = 8
}

export enum Provider {
Expand All @@ -66,6 +67,17 @@ export enum ProrationMode {
DEFERRED = 4,
}

export enum PermissionsCacheLifetime {
WEEK = "WEEK",
TWO_WEEKS = "TWO_WEEKS",
MONTH = "MONTH",
TWO_MONTHS = "TWO_MONTHS",
THREE_MONTHS = "THREE_MONTHS",
SIX_MONTHS = "SIX_MONTHS",
YEAR = "YEAR",
UNLIMITED = "UNLIMITED"
}

export const SKPeriodUnit = {
0: "DAY",
1: "WEEK",
Expand Down
3 changes: 2 additions & 1 deletion src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ const propertyKeyMap = {
[Property.KOCHAVA_DEVICE_ID]: "KOCHAVA_DEVICE_ID",
[Property.CUSTOM_USER_ID]: "CUSTOM_USER_ID",
[Property.FACEBOOK_ATTRIBUTION]: "FACEBOOK_ATTRIBUTION", // android only
[Property.ADVERTISING_ID]: "ADVERTISING_ID" // ios only
[Property.ADVERTISING_ID]: "ADVERTISING_ID", // ios only
[Property.FIREBASE_APP_INSTANCE_ID]: "FIREBASE_APP_INSTANCE_ID"
};

export const convertPropertyToNativeKey = (property: Property): string => {
Expand Down