From 4e5464cec808b9e86751dc9b3639445ad6144359 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Wed, 12 Jul 2023 17:03:05 -0700 Subject: [PATCH 1/3] chore: testing --- apps/demo/src/app.ts | 8 ++++---- tools/demo/nativescript-appcues/index.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/demo/src/app.ts b/apps/demo/src/app.ts index 211a2533..606d189d 100644 --- a/apps/demo/src/app.ts +++ b/apps/demo/src/app.ts @@ -4,9 +4,9 @@ import { Application } from '@nativescript/core'; // Inquiry.init(); // Uncomment to test AppCues: -// import { AppcuesSDK } from '@nstudio/nativescript-appcues'; -// Application.on(Application.launchEvent, () => { -// AppcuesSDK.init('', ''); -// }) +import { AppcuesSDK } from '@nstudio/nativescript-appcues'; +Application.on(Application.launchEvent, () => { + AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); +}) Application.run({ moduleName: 'app-root' }); diff --git a/tools/demo/nativescript-appcues/index.ts b/tools/demo/nativescript-appcues/index.ts index 843ef99f..882c6694 100644 --- a/tools/demo/nativescript-appcues/index.ts +++ b/tools/demo/nativescript-appcues/index.ts @@ -4,7 +4,7 @@ import { AppcuesSDK } from '@nstudio/nativescript-appcues'; export class DemoSharedNativescriptAppcues extends DemoSharedBase { init() { - AppcuesSDK.init('', ''); + AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); } track() { From 06c6bbb011fbf2139fd98d24e95e960228e87d23 Mon Sep 17 00:00:00 2001 From: Osei Fortune Date: Mon, 17 Jul 2023 03:14:43 -0400 Subject: [PATCH 2/3] feat: add missing API methods --- apps/demo/src/app.ts | 33 +++- .../nativescript-appcues/index.android.ts | 167 ++++++++++++---- packages/nativescript-appcues/index.d.ts | 17 ++ packages/nativescript-appcues/index.ios.ts | 179 ++++++++++++++---- .../platforms/android/include.gradle | 5 +- .../io/nstudio/plugins/appcues/Appcues.kt | 21 +- .../android/nativescript_appcues.aar | Bin 3162 -> 6591 bytes .../Android/src/main/AndroidManifest.xml | 7 + tools/demo/nativescript-appcues/index.ts | 8 +- 9 files changed, 364 insertions(+), 73 deletions(-) diff --git a/apps/demo/src/app.ts b/apps/demo/src/app.ts index 606d189d..57acd792 100644 --- a/apps/demo/src/app.ts +++ b/apps/demo/src/app.ts @@ -1,12 +1,37 @@ -import { Application } from '@nativescript/core'; +import { Application, AndroidActivityNewIntentEventData } from '@nativescript/core'; // import { Inquiry } from '@nstudio/nativescript-persona'; // Inquiry.init(); // Uncomment to test AppCues: import { AppcuesSDK } from '@nstudio/nativescript-appcues'; -Application.on(Application.launchEvent, () => { - AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); -}) + +AppcuesSDK.on('analytics', (event) => { + console.log(event); +}); + +AppcuesSDK.on('experience', (event) => { + console.log(event); +}); + +if (global.isAndroid) { + Application.android.on('activityNewIntent', (args: AndroidActivityNewIntentEventData) => { + const didHandleURL = AppcuesSDK.didHandleURL(args.intent); + if (didHandleURL) { + const uri = args.intent.getData?.() as android.net.Uri; + console.log(uri?.toString?.()); + } + }); + Application.android.on('activityCreated', (args) => { + console.log('activityCreated'); + AppcuesSDK.debug(); + }); + AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); +} else { + Application.on('launch', (args) => { + AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); + }); + AppcuesSDK.debug(); +} Application.run({ moduleName: 'app-root' }); diff --git a/packages/nativescript-appcues/index.android.ts b/packages/nativescript-appcues/index.android.ts index 3ec3df39..6af6cb9b 100644 --- a/packages/nativescript-appcues/index.android.ts +++ b/packages/nativescript-appcues/index.android.ts @@ -1,39 +1,140 @@ -import { Utils } from '@nativescript/core'; +import { Utils, fromObject, Application } from '@nativescript/core'; import { AppcuesSDKCommon } from './common'; let appcuesInstance: com.appcues.Appcues; -declare const io; +declare const io, kotlin; + +let events = fromObject({}); + +function parseType(type: com.appcues.AnalyticType) { + switch (type) { + case com.appcues.AnalyticType.IDENTIFY: + return 'identify'; + case com.appcues.AnalyticType.GROUP: + return 'group'; + case com.appcues.AnalyticType.EVENT: + return 'event'; + case com.appcues.AnalyticType.SCREEN: + return 'screen'; + } +} export class AppcuesSDK extends AppcuesSDKCommon { - static init(accountId: string, appId: string) { - appcuesInstance = new io.nstudio.plugins.appcues.Appcues.init(Utils.android.getApplicationContext(), accountId, appId); - } - - static identify(userId: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.identify(userId, Utils.dataSerialize(properties || {})); - } - } - - static track(name: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.track(name, Utils.dataSerialize(properties || {})) - } - } - - static trackScreens() { - if (appcuesInstance) { - appcuesInstance.trackScreens(); - } - } - - static screen(title: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.screen(title, Utils.dataSerialize(properties || {})) - } - } - - static nativeInstance() { - return appcuesInstance; - } + static on = events.on.bind(events); + + static once = events.once.bind(events); + + static off = events.off.bind(events); + + static init(accountId: string, appId: string) { + appcuesInstance = new io.nstudio.plugins.appcues.Appcues.init(Utils.android.getApplicationContext(), accountId, appId); + appcuesInstance.setAnalyticsListener( + new com.appcues.AnalyticsListener({ + trackedAnalytic(type: com.appcues.AnalyticType, value: string, properties: java.util.Map, isInternal: boolean): void { + events.notify({ + eventName: 'analytics', + type: parseType(type), + value, + properties: Utils.dataDeserialize(properties) ?? {}, + isInternal, + }); + }, + }) + ); + appcuesInstance.setExperienceListener( + new com.appcues.ExperienceListener({ + experienceStarted(experienceId: java.util.UUID): void { + events.notify({ + eventName: 'experience', + started: true, + id: experienceId.toString(), + }); + }, + experienceFinished(experienceId: java.util.UUID): void { + events.notify({ + eventName: 'experience', + started: false, + id: experienceId.toString(), + }); + }, + }) + ); + } + + static identify(userId: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.identify(userId, Utils.dataSerialize(properties || {})); + } + } + + static track(name: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.track(name, Utils.dataSerialize(properties || {})); + } + } + + static trackScreens() { + if (appcuesInstance) { + appcuesInstance.trackScreens(); + } + } + + static screen(title: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.screen(title, Utils.dataSerialize(properties || {})); + } + } + + static show(experienceId: string) { + return new Promise((resolve, reject) => { + if (appcuesInstance) { + io.nstudio.plugins.appcues.Appcues.show( + appcuesInstance, + experienceId, + new kotlin.jvm.functions.Function1({ + invoke(done) { + resolve(done); + }, + }) + ); + } else { + reject('SDK unintialized'); + } + }); + } + + static reset() { + if (appcuesInstance) { + appcuesInstance.reset(); + } + } + + static anonymous(properties?: any) { + if (appcuesInstance) { + appcuesInstance.anonymous(Utils.dataSerialize(properties || {})); + } + } + + static group(groupId?: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.group(groupId, Utils.dataSerialize(properties || {})); + } + } + + static debug() { + if (appcuesInstance) { + appcuesInstance.debug(Application.android.foregroundActivity || Application.android.startActivity); + } + } + + static didHandleURL(value: any): boolean { + if (appcuesInstance) { + return appcuesInstance.onNewIntent(Application.android.foregroundActivity || Application.android.startActivity, value); + } + return false; + } + + static nativeInstance() { + return appcuesInstance; + } } diff --git a/packages/nativescript-appcues/index.d.ts b/packages/nativescript-appcues/index.d.ts index df9c71d4..fa138c23 100644 --- a/packages/nativescript-appcues/index.d.ts +++ b/packages/nativescript-appcues/index.d.ts @@ -1,4 +1,5 @@ import { AppcuesSDKCommon } from './common'; +import { EventData } from '@nativescript/core'; export declare class AppcuesSDK extends AppcuesSDKCommon { static nativeInstance(): any /* iOS or Android SDK instance */ @@ -7,4 +8,20 @@ export declare class AppcuesSDK extends AppcuesSDKCommon { static track(name: string, properties?: any): void; static trackScreens(): void; static screen(title: string, properties?: any): void; + static show(experienceId: string): Promise; + static reset(): void; + static anonymous(properties?: any); + static group(groupId?: string, properties?: any); + static debug(); + static didHandleURL(value: any): boolean; + static on(event: 'analytics', callback: (args: EventData & { + type: 'identify' | 'group' | 'event' | 'screen', + value: string, + properties: Record, + isInternal: boolean, + }) => void, thisArg?: any): void; + static on(event: 'experience', callback: (args: EventData & { + started: boolean, + id: string + }) => void, thisArg?: any): void; } diff --git a/packages/nativescript-appcues/index.ios.ts b/packages/nativescript-appcues/index.ios.ts index fe6799a4..9c9facea 100644 --- a/packages/nativescript-appcues/index.ios.ts +++ b/packages/nativescript-appcues/index.ios.ts @@ -1,39 +1,152 @@ -import { Utils } from '@nativescript/core'; +import { Utils, fromObject } from '@nativescript/core'; import { AppcuesSDKCommon } from './common'; let appcuesInstance: Appcues; +let events = fromObject({}); + +function parseType(type: AppcuesAnalytic) { + switch (type) { + case AppcuesAnalytic.Identify: + return 'identify'; + case AppcuesAnalytic.Group: + return 'group'; + case AppcuesAnalytic.Event: + return 'event'; + case AppcuesAnalytic.Screen: + return 'screen'; + } +} + +@NativeClass() +@ObjCClass(AppcuesAnalyticsDelegate) +class AppcuesAnalyticsDelegateImpl extends NSObject implements AppcuesAnalyticsDelegate { + didTrackWithAnalyticValuePropertiesIsInternal(analytic: AppcuesAnalytic, value: string, properties: NSDictionary, isInternal: boolean): void { + events.notify({ + eventName: 'analytics', + type: parseType(analytic), + value, + properties: Utils.dataDeserialize(properties) ?? {}, + isInternal, + }); + } +} + +@NativeClass() +@ObjCClass(AppcuesExperienceDelegate) +class AppcuesExperienceDelegateImpl extends NSObject implements AppcuesExperienceDelegate { + experienceID: string | null = null; + + canDisplayExperienceWithExperienceID(experienceID: string): boolean { + this.experienceID = experienceID; + return true; + } + experienceDidAppear(): void { + events.notify({ + eventName: 'experience', + started: true, + id: this.experienceID, + }); + } + experienceDidDisappear(): void { + events.notify({ + eventName: 'experience', + started: false, + id: this.experienceID, + }); + this.experienceID = null; + } + experienceWillAppear(): void {} + experienceWillDisappear(): void {} +} + export class AppcuesSDK extends AppcuesSDKCommon { - static init(accountId: string, appId: string) { - const config = Config.alloc().initWithAccountIDApplicationID(accountId, appId); - appcuesInstance = Appcues.alloc().initWithConfig(config); - } - - static identify(userId: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.identifyWithUserIDProperties(userId, Utils.dataSerialize(properties || {})); - } - } - - static track(name: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.trackWithNameProperties(name, Utils.dataSerialize(properties || {})) - } - } - - static trackScreens() { - if (appcuesInstance) { - appcuesInstance.trackScreens(); - } - } - - static screen(title: string, properties?: any) { - if (appcuesInstance) { - appcuesInstance.screenWithTitleProperties(title, Utils.dataSerialize(properties || {})) - } - } - - static nativeInstance() { - return appcuesInstance; - } + private static _appcuesAnalyticsDelegate = AppcuesAnalyticsDelegateImpl.new(); + private static _appcuesExperienceDelegate = AppcuesExperienceDelegateImpl.new(); + + static init(accountId: string, appId: string) { + if (appcuesInstance) { + appcuesInstance.analyticsDelegate = null; + appcuesInstance.experienceDelegate = null; + } + const config = Config.alloc().initWithAccountIDApplicationID(accountId, appId); + appcuesInstance = Appcues.alloc().initWithConfig(config); + appcuesInstance.analyticsDelegate = AppcuesSDK._appcuesAnalyticsDelegate; + appcuesInstance.experienceDelegate = AppcuesSDK._appcuesExperienceDelegate; + } + + static identify(userId: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.identifyWithUserIDProperties(userId, Utils.dataSerialize(properties || {})); + } + } + + static track(name: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.trackWithNameProperties(name, Utils.dataSerialize(properties || {})); + } + } + + static trackScreens() { + if (appcuesInstance) { + appcuesInstance.trackScreens(); + } + } + + static screen(title: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.screenWithTitleProperties(title, Utils.dataSerialize(properties || {})); + } + } + + static show(experienceId: string) { + return new Promise((resolve, reject) => { + if (appcuesInstance) { + appcuesInstance.showWithExperienceIDCompletion(experienceId, (done, error) => { + if (error) { + reject(new Error(error.localizedDescription)); + } else { + resolve(done); + } + }); + } else { + reject('SDK unintialized'); + } + }); + } + + static reset() { + if (appcuesInstance) { + appcuesInstance.reset(); + } + } + + static anonymous(properties?: any) { + if (appcuesInstance) { + appcuesInstance.anonymousWithProperties(Utils.dataSerialize(properties || {})); + } + } + + static group(groupId?: string, properties?: any) { + if (appcuesInstance) { + appcuesInstance.groupWithGroupIDProperties(groupId ?? null, Utils.dataSerialize(properties || {})); + } + } + + static debug() { + if (appcuesInstance) { + appcuesInstance.debug(); + } + } + + static didHandleURL(value: any): boolean { + if (appcuesInstance) { + return appcuesInstance.didHandleURL(value); + } + return false; + } + + static nativeInstance() { + return appcuesInstance; + } } diff --git a/packages/nativescript-appcues/platforms/android/include.gradle b/packages/nativescript-appcues/platforms/android/include.gradle index fc260721..e988c7b6 100644 --- a/packages/nativescript-appcues/platforms/android/include.gradle +++ b/packages/nativescript-appcues/platforms/android/include.gradle @@ -1,3 +1,6 @@ dependencies { - implementation "com.appcues:appcues:1.1.2" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1" + + implementation "com.appcues:appcues:2.1.3" } \ No newline at end of file diff --git a/packages/nativescript-appcues/platforms/android/java/io/nstudio/plugins/appcues/Appcues.kt b/packages/nativescript-appcues/platforms/android/java/io/nstudio/plugins/appcues/Appcues.kt index c4b5a066..aa77a576 100644 --- a/packages/nativescript-appcues/platforms/android/java/io/nstudio/plugins/appcues/Appcues.kt +++ b/packages/nativescript-appcues/platforms/android/java/io/nstudio/plugins/appcues/Appcues.kt @@ -2,9 +2,15 @@ package io.nstudio.plugins.appcues import android.content.Context import com.appcues.AppcuesConfig +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch class Appcues { companion object { + + private val mainScope = CoroutineScope(Dispatchers.Main) + @JvmOverloads @JvmStatic fun init( @@ -15,6 +21,19 @@ class Appcues { ): com.appcues.Appcues { return com.appcues.Appcues(context, accountId, applicationId, config) } + + + @JvmStatic + fun show( + appcues: com.appcues.Appcues, + experienceId: String, + callback: (Boolean) -> Unit + ) { + mainScope.launch { + val showed = appcues.show(experienceId) + callback(showed) + } + } } -} \ No newline at end of file +} diff --git a/packages/nativescript-appcues/platforms/android/nativescript_appcues.aar b/packages/nativescript-appcues/platforms/android/nativescript_appcues.aar index a5ebba9b4b26ba3be4e56ec1b0958df215b02075..c9d14a9138c36400c1df097cee7e01ea313477f3 100644 GIT binary patch delta 5950 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 delta 2494 zcmV;v2|@P1Gujxi3;}=jHp4__2><{L3;+NN0001EY+-YAWpgfSVRD_82{7B~8^?pV z8p?{UDAgi@N?1`TU2%n!M%uJNTU11ZO*fkmN$S>?jiYGmXdP{}O04_eQc*p~>gu&f z>pm8xia1J9MUS=J-RbJA&d&dtdFGvW=J|YoGrxJ>?|cb3DIkB~V`zXRmJKnjQY36%Q? zHf-3W8@+lr+W-I{zYN;_c|tMF9|Fk?8k1p6p_7AyZ@4!Rd)<{kpu4-U5M@3e@>7mX zp=mBMJxbah=k$M_i$ea7ECbmW+8`Y`P7B?QF}ZkQS$4jI7!W2lwXC9sjrm!;J}qYF z!WAUIyz%Fk1uL(^7pKbKwbVtwQ}o$LGIQ}LpO&lhh8?P$kUgi%_AXK95XW%%Oiyl! z`ShW3uq;KiF*IfZb!_8&@*Pa;%y9fS_r8YTf2F3bvvhxL3c5>~_?6=YZLv)yuz@`e zOL^hEuZJ=-r#GFB?%Y1Xn|Q+?o_MUHwKP{yX^V<%VQuW$zrCF4nG)6YlX!)5f97G0 z=%78_KdRKPru|gVnMG26aqo{sT*gD;T@HT*F=A5}LXDLgjVwhK=U6WyVjx+dq-5TB zx3LMX;7Nb##Fnu*e%)Od@2vXe%O%T<--&_`%*bLTV97GYH6O0cdq$vuXADGtVtU$HUai3H&jC8bf zzfz7Kl=SnWnD;X5`@WJ)El!+keq?K|S###C_TxsKEy<;(^B1?5W?7pA=YsJ?D4nXE zSyq3(uK-dd%I_Ye3M9!R>bzWUbgo;5ougaT!4@~YD?qgbp6vu}e~xdVNOHk2YLN4Y#2|vw)a5c(j{i^vz?`eo0orx8M}A40Zy{_as+oP9!i@IiL6jAs=zv36wdT?LkiwKK7yPj{lh}B?B>j-Y#_Xbb!Ids>K5Cnhw z5`0(6IHK1}F0D(<_gqv6{^dIUSHb|6YWCzbUnkmPJmYR&j`1zrf%_jEhV-;IXgzKO z#RsX5yP%{+@)&E6TabuduLrJI-$%2K;ADu6Iay~(Y2$C6n z+r3-mBI`{sd~LKYZnHa?n28&*S74ir7&(4qhKZtaUq1F9CGBOI#;Ql;Z?8EXyOw`&oajKS0`<}bP76U?#DB6e)^v-{Zv9g!h7vozBJUgizdCt$K$1XqqrjE7o5IACw zfwj?4aG$QkiBR~YEtnuZ4Y~)c1%54kK=P_2Mk2^zFr{8ik|fiqcS81q#9BK`H;l{l zS@m9+EC68epX}@}6La<4r|N&K`o1{aSd^4lv;AuMsYl}DwoW-9%qF`~G<>*Rt!AjkS5AW6L z9laS=0l!*1B8O+LC|7*vEv-^Lw(T zWdz9T1NK_dN|vhXtQSh^W=S23dr5lCoF9d*VlQ(xR3l2+P&a*6tt^6Gyl~_V^=iS< z*VpM-So))Zv8uNV4$@d`EZ3~nznHSH?dXDS^s6J}QT=eCN_}l#a-{9TK{e}#GY@V- z1mBiX8e;*B*j_&2pYgLrZrk8)s?!XL0DEpJzTt<#q zrxL1$u0&%>=b$@)8X6aYu&2jr`c-Rt-o1~iPH0AIMrcIrhV&2ez~P1MLF1JHuMN7S z6zFM_rwi`j(>gNAKhc>PRsmhJ7lc!Ymhs>?fdJcgI3T;pbW!kj!UoiQd2YGFzInL? znKKfb$K^U`e%F7EI(=PoEA6WdS|Aw{BhJw@-m$mGvQy{@+2RL>o^p>2{ARHXhGP{I zEePlL!1c<^ue|J4tg1|s)G7}|OrgzQn>>cu>1WTg&K)b*-SI@p^kq-K zXz#IPVmPMRZPfPknp=%|QfJ^@p1ezHV$o*&(XdT${&;h_&en!gLE2dDMncjlCSdI= ztzY~#`;S-yS#7g_<|zi5P2*C7DJ)tboAlR1C9!{~bSgQRYWzKuO{XzPKQR3`bSlNi z$H#xQfxaji1A?!}7qI#b3CWMSYn{~gcTL#=)@Hc%F{w3}{@Gynhq diff --git a/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml b/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml index df97a703..bdf6ced1 100644 --- a/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml +++ b/tools/assets/App_Resources/Android/src/main/AndroidManifest.xml @@ -44,6 +44,13 @@ + + + + + + + diff --git a/tools/demo/nativescript-appcues/index.ts b/tools/demo/nativescript-appcues/index.ts index 882c6694..8c164dc9 100644 --- a/tools/demo/nativescript-appcues/index.ts +++ b/tools/demo/nativescript-appcues/index.ts @@ -4,7 +4,13 @@ import { AppcuesSDK } from '@nstudio/nativescript-appcues'; export class DemoSharedNativescriptAppcues extends DemoSharedBase { init() { - AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); + //AppcuesSDK.init('69047', 'a2355571-cbd5-4a8e-a0ed-a9ea09f0b904'); + AppcuesSDK.show('11111').then(shown =>{ + console.log('shown', shown); + }) + .catch(err =>{ + console.log('error', err); + }) } track() { From 7da2a57b4d00c44d9bdb8213c862757fa268d069 Mon Sep 17 00:00:00 2001 From: Nathan Walker Date: Mon, 17 Jul 2023 09:33:07 -0700 Subject: [PATCH 3/3] release(appcues): 1.0.1 --- packages/nativescript-appcues/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nativescript-appcues/package.json b/packages/nativescript-appcues/package.json index 2b284159..4f442e83 100644 --- a/packages/nativescript-appcues/package.json +++ b/packages/nativescript-appcues/package.json @@ -1,6 +1,6 @@ { "name": "@nstudio/nativescript-appcues", - "version": "1.0.0", + "version": "1.0.1", "description": "Appcues SDK for NativeScript", "main": "index", "typings": "index.d.ts",