Skip to content

Commit 3bcb05e

Browse files
[SDK-2253] Expose the setDMAParamsForEEA method (#727)
* Added new method and updated native SDKs * Added fix and changelog * Updated ios to 3.2.0 * Removed setDebug * Update index.js
1 parent 5ae8572 commit 3bcb05e

File tree

7 files changed

+185
-121
lines changed

7 files changed

+185
-121
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
2+
6.1.0 Feb 28, 2024
3+
* Update Android SDK to 5.9.0
4+
* Update iOS SDK to 3.2.0
5+
* Added new method, setDMAParamsForEEA(), for setting DMA compliance parameters.
6+
* Removed the deprecated setDebug() method
7+
18
6.0.0 Dec 1, 2023
29
* Update Android SDK to 5.7.5
310
* Update iOS SDK to 3.0.1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "branch-cordova-sdk",
33
"description": "Branch Metrics Cordova SDK",
44
"main": "src/index.js",
5-
"version": "6.0.0",
5+
"version": "6.1.0",
66
"homepage": "https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking",
77
"repository": {
88
"type": "git",

plugin.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ SOFTWARE.
2424
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
2525
xmlns:android="http://schemas.android.com/apk/res/android"
2626
id="branch-cordova-sdk"
27-
version="6.0.0">
27+
version="6.1.0">
2828

2929
<!-- Description -->
3030
<name>branch-cordova-sdk</name>
@@ -63,7 +63,7 @@ SOFTWARE.
6363
<!-- Manifest configuration is done via a js script. We should move it to this config in the future. -->
6464

6565
<source-file src="src/android/io/branch/BranchSDK.java" target-dir="src/io/branch" />
66-
<framework src="io.branch.sdk.android:library:5.7.5"/>
66+
<framework src="io.branch.sdk.android:library:5.9.0"/>
6767
</platform>
6868

6969
<!-- iOS -->
@@ -87,7 +87,7 @@ SOFTWARE.
8787
<source url="https://cdn.cocoapods.org/"/>
8888
</config>
8989
<pods>
90-
<pod name="BranchSDK" spec="~> 3.0.1" />
90+
<pod name="BranchSDK" spec="~> 3.2.0" />
9191
</pods>
9292
</podspec>
9393
</platform>

src/android/io/branch/BranchSDK.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,13 @@ public boolean execute(String action, JSONArray args, CallbackContext callbackCo
199199
}
200200
cordova.getActivity().runOnUiThread(r);
201201
return true;
202+
} else if (action.equals("setDMAParamsForEEA")) {
203+
if (args.length() != 3) {
204+
callbackContext.error("Parameter count mismatch");
205+
return false;
206+
}
207+
cordova.getActivity().runOnUiThread(r);
208+
return true;
202209
}
203210

204211
return true;
@@ -680,6 +687,17 @@ public void sendBranchEvent(String eventName, JSONObject metaData, CallbackConte
680687
//callbackContext.success();
681688
}
682689

690+
/**
691+
* <p>Configures the handling of DMA parameters for users in the EEA region based on their consent.</p>
692+
*
693+
* @param eeaRegion A {@link Boolean} value indicating if the user is from the European Economic Area (EEA).
694+
* @param adPersonalizationConsent A {@link Boolean} value indicating if the user has consented to ad personalization.
695+
* @param adUserDataUsageConsent A {@link Boolean} value indicating if the user has consented to the usage of their data for ads.
696+
*/
697+
public void setDMAParamsForEEA(boolean eeaRegion, boolean adPersonalizationConsent, boolean adUserDataUsageConsent) {
698+
Branch.getInstance().setDMAParamsForEEA(eeaRegion, adPersonalizationConsent, adUserDataUsageConsent);
699+
}
700+
683701
private BranchUniversalObject getContentItem(JSONObject item) throws JSONException {
684702
BranchUniversalObject universalObject = new BranchUniversalObject();
685703
ContentMetadata contentMetadata = new ContentMetadata();
@@ -1129,6 +1147,8 @@ public void run() {
11291147
localization.put("shareWith", "Share With");
11301148
}
11311149
showShareSheet(this.args.getInt(0), this.args.getJSONObject(1), this.args.getJSONObject(2), localization);
1150+
} else if (this.action.equals("setDMAParamsForEEA")) {
1151+
setDMAParamsForEEA(this.args.getBoolean(0), this.args.getBoolean(1), this.args.getBoolean(2));
11321152
}
11331153
}
11341154
} catch (JSONException e) {

src/index.js

Lines changed: 123 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ const standardEvent = {
2929
STANDARD_EVENT_INVITE: "INVITE",
3030
STANDARD_EVENT_LOGIN: "LOGIN",
3131
STANDARD_EVENT_SUBSCRIBE: "SUBSCRIBE",
32-
STANDARD_EVENT_START_TRIAL: "START_TRIAL"
33-
}
32+
STANDARD_EVENT_START_TRIAL: "START_TRIAL",
33+
};
3434

3535
// Branch prototype
3636
var Branch = function Branch() {
@@ -45,7 +45,7 @@ function execute(method, params) {
4545

4646
if (method == "getStandardEvents") {
4747
return new Promise(function promise(resolve, reject) {
48-
resolve(standardEvent);
48+
resolve(standardEvent);
4949
});
5050
}
5151

@@ -93,7 +93,9 @@ Branch.prototype.disableTracking = function disableTracking(isEnabled) {
9393

9494
Branch.prototype.enableTestMode = function initSession() {
9595
if (this.sessionInitialized) {
96-
return executeReject("[enableTestMode] should be called before [initSession]");
96+
return executeReject(
97+
"[enableTestMode] should be called before [initSession]"
98+
);
9799
}
98100
return execute("enableTestMode");
99101
};
@@ -113,13 +115,6 @@ Branch.prototype.setRequestMetadata = function setRequestMetadata(key, val) {
113115
return execute("setRequestMetadata", [key, val]);
114116
};
115117

116-
// Deprecated. Replaced by setLogging(isEnabled) and test devices. https://help.branch.io/using-branch/docs/adding-test-devices
117-
Branch.prototype.setDebug = function setDebug(isEnabled) {
118-
return new Promise(function promise(resolve, reject) {
119-
resolve(false);
120-
});
121-
};
122-
123118
// For early lifecycle logging, we recommend you enable logging in the native iOS or Android code.
124119
Branch.prototype.setLogging = function setLogging(isEnabled) {
125120
var value = typeof isEnabled !== "boolean" ? false : isEnabled;
@@ -137,26 +132,26 @@ Branch.prototype.setCookieBasedMatching = function setCookieBasedMatching(
137132
};
138133

139134
//DEPRECATED
140-
Branch.prototype.delayInitToCheckForSearchAds = function delayInitToCheckForSearchAds(
141-
isEnabled
142-
) {
143-
// stub call from known issue calling it from JS
144-
return new Promise(function promise(resolve, reject) {
145-
resolve(false);
146-
});
135+
Branch.prototype.delayInitToCheckForSearchAds =
136+
function delayInitToCheckForSearchAds(isEnabled) {
137+
// stub call from known issue calling it from JS
138+
return new Promise(function promise(resolve, reject) {
139+
resolve(false);
140+
});
147141

148-
// var value = typeof isEnabled !== "boolean" ? false : isEnabled;
142+
// var value = typeof isEnabled !== "boolean" ? false : isEnabled;
149143

150-
// return execute("delayInitToCheckForSearchAds", [value]);
151-
};
144+
// return execute("delayInitToCheckForSearchAds", [value]);
145+
};
152146

153147
Branch.prototype.getFirstReferringParams = function getFirstReferringParams() {
154148
return execute("getFirstReferringParams");
155149
};
156150

157-
Branch.prototype.getLatestReferringParams = function getLatestReferringParams() {
158-
return execute("getLatestReferringParams");
159-
};
151+
Branch.prototype.getLatestReferringParams =
152+
function getLatestReferringParams() {
153+
return execute("getLatestReferringParams");
154+
};
160155

161156
Branch.prototype.setIdentity = function setIdentity(identity) {
162157
if (identity) {
@@ -171,13 +166,9 @@ Branch.prototype.logout = function logout() {
171166

172167
Branch.prototype.getStandardEvents = function getStandardEvents() {
173168
return execute("getStandardEvents");
174-
175169
};
176170

177-
Branch.prototype.sendBranchEvent = function sendBranchEvent(
178-
action,
179-
metaData
180-
) {
171+
Branch.prototype.sendBranchEvent = function sendBranchEvent(action, metaData) {
181172
var args = [action];
182173
if (!action) {
183174
return executeReject("Please set a standard event");
@@ -190,86 +181,85 @@ Branch.prototype.sendBranchEvent = function sendBranchEvent(
190181
return execute("sendBranchEvent", args);
191182
};
192183

193-
Branch.prototype.createBranchUniversalObject = function createBranchUniversalObject(
194-
options
195-
) {
196-
return new Promise(function promise(resolve, reject) {
197-
execute("createBranchUniversalObject", [options]).then(
198-
function success(res) {
199-
var obj = {
200-
message: res.message,
201-
instanceId: res.branchUniversalObjectId
202-
};
203-
204-
obj.registerView = function registerView() {
205-
return execute("registerView", [obj.instanceId]);
206-
};
207-
208-
obj.generateShortUrl = function generateShortUrl(
209-
analytics,
210-
properties
211-
) {
212-
return execute("generateShortUrl", [
213-
obj.instanceId,
184+
Branch.prototype.createBranchUniversalObject =
185+
function createBranchUniversalObject(options) {
186+
return new Promise(function promise(resolve, reject) {
187+
execute("createBranchUniversalObject", [options]).then(
188+
function success(res) {
189+
var obj = {
190+
message: res.message,
191+
instanceId: res.branchUniversalObjectId,
192+
};
193+
194+
obj.registerView = function registerView() {
195+
return execute("registerView", [obj.instanceId]);
196+
};
197+
198+
obj.generateShortUrl = function generateShortUrl(
214199
analytics,
215200
properties
216-
]);
217-
};
218-
219-
obj.showShareSheet = function showShareSheet(
220-
analytics,
221-
properties,
222-
shareText
223-
) {
224-
var message = !shareText ? "This stuff is awesome: " : shareText;
225-
226-
return execute("showShareSheet", [
227-
obj.instanceId,
201+
) {
202+
return execute("generateShortUrl", [
203+
obj.instanceId,
204+
analytics,
205+
properties,
206+
]);
207+
};
208+
209+
obj.showShareSheet = function showShareSheet(
228210
analytics,
229211
properties,
230-
message
231-
]);
232-
};
233-
234-
obj.onShareSheetLaunched = function onShareSheetLaunched(callback) {
235-
if (deviceVendor.indexOf("Apple") < 0) {
236-
executeCallback("onShareLinkDialogLaunched", callback, [
237-
obj.instanceId
212+
shareText
213+
) {
214+
var message = !shareText ? "This stuff is awesome: " : shareText;
215+
216+
return execute("showShareSheet", [
217+
obj.instanceId,
218+
analytics,
219+
properties,
220+
message,
238221
]);
239-
}
240-
};
241-
242-
obj.onShareSheetDismissed = function onShareSheetDismissed(callback) {
243-
executeCallback("onShareLinkDialogDismissed", callback, [
244-
obj.instanceId
245-
]);
246-
};
247-
248-
obj.onLinkShareResponse = function onLinkShareResponse(callback) {
249-
executeCallback("onLinkShareResponse", callback, [obj.instanceId]);
250-
};
251-
252-
obj.onChannelSelected = function onChannelSelected(callback) {
253-
if (deviceVendor.indexOf("Apple") < 0) {
254-
executeCallback("onChannelSelected", callback, [obj.instanceId]);
255-
}
256-
};
257-
258-
obj.listOnSpotlight = function listOnSpotlight() {
259-
if (!(deviceVendor.indexOf("Apple") < 0)) {
260-
return execute("listOnSpotlight", [obj.instanceId]);
261-
}
262-
return executeReject("iOS Spotlight only");
263-
};
264-
265-
resolve(obj);
266-
},
267-
function failure(err) {
268-
reject(err);
269-
}
270-
);
271-
});
272-
};
222+
};
223+
224+
obj.onShareSheetLaunched = function onShareSheetLaunched(callback) {
225+
if (deviceVendor.indexOf("Apple") < 0) {
226+
executeCallback("onShareLinkDialogLaunched", callback, [
227+
obj.instanceId,
228+
]);
229+
}
230+
};
231+
232+
obj.onShareSheetDismissed = function onShareSheetDismissed(callback) {
233+
executeCallback("onShareLinkDialogDismissed", callback, [
234+
obj.instanceId,
235+
]);
236+
};
237+
238+
obj.onLinkShareResponse = function onLinkShareResponse(callback) {
239+
executeCallback("onLinkShareResponse", callback, [obj.instanceId]);
240+
};
241+
242+
obj.onChannelSelected = function onChannelSelected(callback) {
243+
if (deviceVendor.indexOf("Apple") < 0) {
244+
executeCallback("onChannelSelected", callback, [obj.instanceId]);
245+
}
246+
};
247+
248+
obj.listOnSpotlight = function listOnSpotlight() {
249+
if (!(deviceVendor.indexOf("Apple") < 0)) {
250+
return execute("listOnSpotlight", [obj.instanceId]);
251+
}
252+
return executeReject("iOS Spotlight only");
253+
};
254+
255+
resolve(obj);
256+
},
257+
function failure(err) {
258+
reject(err);
259+
}
260+
);
261+
});
262+
};
273263

274264
Branch.prototype.crossPlatformIds = function crossPlatformIds() {
275265
return execute("crossPlatformIds");
@@ -302,6 +292,35 @@ Branch.prototype.getBranchQRCode = function getBranchQRCode(
302292
return execute("getBranchQRCode", args);
303293
};
304294

295+
Branch.prototype.setDMAParamsForEEA = function setDMAParamsForEEA(
296+
eeaRegion,
297+
adPersonalizationConsent,
298+
adUserDataUsageConsent
299+
) {
300+
const isValid =
301+
validateParam(eeaRegion, "eeaRegion") &&
302+
validateParam(adPersonalizationConsent, "adPersonalizationConsent") &&
303+
validateParam(adUserDataUsageConsent, "adUserDataUsageConsent");
304+
305+
if (isValid) {
306+
var args = [eeaRegion, adPersonalizationConsent, adUserDataUsageConsent];
307+
return execute("setDMAParamsForEEA", args);
308+
} else {
309+
return executeReject("Unable to set DMA Params");
310+
}
311+
};
312+
313+
const validateParam = (param, paramName) => {
314+
if (param === true || param === false) {
315+
return true;
316+
} else {
317+
console.warn(
318+
`setDMAParamsForEEA: ${paramName} must be boolean, but got ${param}`
319+
);
320+
321+
return false;
322+
}
323+
};
305324

306325
// export Branch object
307326
module.exports = new Branch();

src/ios/BranchSDK.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
- (void)setIdentity:(CDVInvokedUrlCommand*)command;
4141
- (void)registerDeepLinkController:(CDVInvokedUrlCommand*)command;
4242
- (void)logout:(CDVInvokedUrlCommand*)command;
43+
- (void)setDMAParamsForEEA:(CDVInvokedUrlCommand*)command;
4344

4445
// Branch Universal Object Methods
4546
- (void)createBranchUniversalObject:(CDVInvokedUrlCommand*)command;

0 commit comments

Comments
 (0)