@appboxo/capacitor-boxo-sdk 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CapacitorBoxoSdk.podspec +18 -0
- package/Package.swift +28 -0
- package/README.md +240 -0
- package/android/build.gradle +84 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/io/boxo/sdk/capacitor/AppboxoPlugin.kt +322 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +485 -0
- package/dist/esm/definitions.d.ts +156 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/plugin.cjs.js +10 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +13 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/AppboxoPlugin/AppboxoPlugin.swift +293 -0
- package/ios/Tests/AppboxoPluginTests/AppboxoPluginTests.swift +15 -0
- package/package.json +80 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = 'CapacitorBoxoSdk'
|
|
7
|
+
s.version = package['version']
|
|
8
|
+
s.summary = package['description']
|
|
9
|
+
s.license = package['license']
|
|
10
|
+
s.homepage = package['repository']['url']
|
|
11
|
+
s.author = package['author']
|
|
12
|
+
s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
|
|
13
|
+
s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
|
|
14
|
+
s.ios.deployment_target = '13.0'
|
|
15
|
+
s.dependency 'Capacitor'
|
|
16
|
+
s.dependency 'AppBoxoSDK', '1.5.4'
|
|
17
|
+
s.swift_version = '5.1'
|
|
18
|
+
end
|
package/Package.swift
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// swift-tools-version: 5.9
|
|
2
|
+
import PackageDescription
|
|
3
|
+
|
|
4
|
+
let package = Package(
|
|
5
|
+
name: "CapacitorBoxoSdk",
|
|
6
|
+
platforms: [.iOS(.v13)],
|
|
7
|
+
products: [
|
|
8
|
+
.library(
|
|
9
|
+
name: "CapacitorBoxoSdk",
|
|
10
|
+
targets: ["AppboxoPlugin"])
|
|
11
|
+
],
|
|
12
|
+
dependencies: [
|
|
13
|
+
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", branch: "main")
|
|
14
|
+
],
|
|
15
|
+
targets: [
|
|
16
|
+
.target(
|
|
17
|
+
name: "AppboxoPlugin",
|
|
18
|
+
dependencies: [
|
|
19
|
+
.product(name: "Capacitor", package: "capacitor-swift-pm"),
|
|
20
|
+
.product(name: "Cordova", package: "capacitor-swift-pm")
|
|
21
|
+
],
|
|
22
|
+
path: "ios/Sources/AppboxoPlugin"),
|
|
23
|
+
.testTarget(
|
|
24
|
+
name: "AppboxoPluginTests",
|
|
25
|
+
dependencies: ["AppboxoPlugin"],
|
|
26
|
+
path: "ios/Tests/AppboxoPluginTests")
|
|
27
|
+
]
|
|
28
|
+
)
|
package/README.md
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# capacitor-boxo-sdk
|
|
2
|
+
|
|
3
|
+
A Capacitor wrapper over Appboxo SDK for IOS and Android.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install capacitor-boxo-sdk
|
|
9
|
+
npx cap sync
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## API
|
|
13
|
+
|
|
14
|
+
<docgen-index>
|
|
15
|
+
|
|
16
|
+
* [`setConfig(...)`](#setconfig)
|
|
17
|
+
* [`openMiniapp(...)`](#openminiapp)
|
|
18
|
+
* [`setAuthCode(...)`](#setauthcode)
|
|
19
|
+
* [`closeMiniapp(...)`](#closeminiapp)
|
|
20
|
+
* [`sendCustomEvent(...)`](#sendcustomevent)
|
|
21
|
+
* [`sendPaymentEvent(...)`](#sendpaymentevent)
|
|
22
|
+
* [`getMiniapps()`](#getminiapps)
|
|
23
|
+
* [`hideMiniapps()`](#hideminiapps)
|
|
24
|
+
* [`logout()`](#logout)
|
|
25
|
+
* [Interfaces](#interfaces)
|
|
26
|
+
|
|
27
|
+
</docgen-index>
|
|
28
|
+
|
|
29
|
+
<docgen-api>
|
|
30
|
+
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->
|
|
31
|
+
|
|
32
|
+
### setConfig(...)
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
setConfig(options: ConfigOptions) => Promise<void>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Set global configs
|
|
39
|
+
|
|
40
|
+
| Param | Type |
|
|
41
|
+
| ------------- | ------------------------------------------------------- |
|
|
42
|
+
| **`options`** | <code><a href="#configoptions">ConfigOptions</a></code> |
|
|
43
|
+
|
|
44
|
+
--------------------
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### openMiniapp(...)
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
openMiniapp(options: OpenMiniappOptions) => Promise<void>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Open miniapp with options
|
|
54
|
+
|
|
55
|
+
| Param | Type |
|
|
56
|
+
| ------------- | ----------------------------------------------------------------- |
|
|
57
|
+
| **`options`** | <code><a href="#openminiappoptions">OpenMiniappOptions</a></code> |
|
|
58
|
+
|
|
59
|
+
--------------------
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
### setAuthCode(...)
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
setAuthCode(options: { appId: string; authCode: string; }) => Promise<void>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
get AuthCode from hostapp backend and send it to miniapp
|
|
69
|
+
|
|
70
|
+
| Param | Type |
|
|
71
|
+
| ------------- | ------------------------------------------------- |
|
|
72
|
+
| **`options`** | <code>{ appId: string; authCode: string; }</code> |
|
|
73
|
+
|
|
74
|
+
--------------------
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
### closeMiniapp(...)
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
closeMiniapp(options: { appId: string; }) => Promise<void>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
close miniapp by appId
|
|
84
|
+
|
|
85
|
+
| Param | Type |
|
|
86
|
+
| ------------- | ------------------------------- |
|
|
87
|
+
| **`options`** | <code>{ appId: string; }</code> |
|
|
88
|
+
|
|
89
|
+
--------------------
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
### sendCustomEvent(...)
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
sendCustomEvent(customEvent: CustomEvent) => Promise<void>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
send custom event to miniapp
|
|
99
|
+
|
|
100
|
+
| Param | Type |
|
|
101
|
+
| ----------------- | --------------------------------------------------- |
|
|
102
|
+
| **`customEvent`** | <code><a href="#customevent">CustomEvent</a></code> |
|
|
103
|
+
|
|
104
|
+
--------------------
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
### sendPaymentEvent(...)
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
sendPaymentEvent(paymentEvent: PaymentEvent) => Promise<void>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
send payment event to miniapp
|
|
114
|
+
|
|
115
|
+
| Param | Type |
|
|
116
|
+
| ------------------ | ----------------------------------------------------- |
|
|
117
|
+
| **`paymentEvent`** | <code><a href="#paymentevent">PaymentEvent</a></code> |
|
|
118
|
+
|
|
119
|
+
--------------------
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
### getMiniapps()
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
getMiniapps() => Promise<MiniappListResult>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Get list of miniapps
|
|
129
|
+
|
|
130
|
+
**Returns:** <code>Promise<<a href="#miniapplistresult">MiniappListResult</a>></code>
|
|
131
|
+
|
|
132
|
+
--------------------
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
### hideMiniapps()
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
hideMiniapps() => Promise<void>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Miniapp opens on a native screen. To show payment processing page need to hide miniapp screen.
|
|
142
|
+
To use this function need to enable 'enableMultitaskMode: true' in Appboxo.setConfigs()
|
|
143
|
+
|
|
144
|
+
--------------------
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
### logout()
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
logout() => Promise<void>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
When host app user logs out, it is highly important to clear all miniapp storage data.
|
|
154
|
+
|
|
155
|
+
--------------------
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
### Interfaces
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
#### ConfigOptions
|
|
162
|
+
|
|
163
|
+
| Prop | Type | Description |
|
|
164
|
+
| ------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------- |
|
|
165
|
+
| **`clientId`** | <code>string</code> | your client id from dashboard |
|
|
166
|
+
| **`userId`** | <code>string</code> | hostapp userId, will be used for the Consent Management |
|
|
167
|
+
| **`sandboxMode`** | <code>boolean</code> | switch to sandbox mode |
|
|
168
|
+
| **`enableMultitaskMode`** | <code>boolean</code> | Each miniapp appears as a task in the Recents screen. !It works only on android devices. |
|
|
169
|
+
| **`theme`** | <code>'light' \| 'dark' \| 'system'</code> | theme for splash screen and other native components used inside miniapp. |
|
|
170
|
+
| **`isDebug`** | <code>boolean</code> | enables webview debugging |
|
|
171
|
+
| **`showPermissionsPage`** | <code>boolean</code> | use it to hide "Settings" from Miniapp menu |
|
|
172
|
+
| **`showClearCache`** | <code>boolean</code> | use it to hide "Clear cache" from Miniapp menu |
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
#### OpenMiniappOptions
|
|
176
|
+
|
|
177
|
+
| Prop | Type | Description |
|
|
178
|
+
| -------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
179
|
+
| **`appId`** | <code>string</code> | miniapp id |
|
|
180
|
+
| **`data`** | <code>object</code> | (optional) data as Map that is sent to miniapp |
|
|
181
|
+
| **`theme`** | <code>'light' \| 'dark' \| 'system'</code> | (optional) miniapp theme "dark" \| "light" (by default is system theme) |
|
|
182
|
+
| **`extraUrlParams`** | <code>object</code> | (optional) extra query params to append to miniapp URL (like: http://miniapp-url.com/?param=test) |
|
|
183
|
+
| **`urlSuffix`** | <code>string</code> | (optional) suffix to append to miniapp URL (like: http://miniapp-url.com/?param=test) |
|
|
184
|
+
| **`colors`** | <code><a href="#coloroptions">ColorOptions</a></code> | (optional) provide colors to miniapp if miniapp supports |
|
|
185
|
+
| **`enableSplash`** | <code>boolean</code> | (optional) use to skip miniapp splash screen |
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
#### ColorOptions
|
|
189
|
+
|
|
190
|
+
| Prop | Type |
|
|
191
|
+
| -------------------- | ------------------- |
|
|
192
|
+
| **`primaryColor`** | <code>string</code> |
|
|
193
|
+
| **`secondaryColor`** | <code>string</code> |
|
|
194
|
+
| **`tertiaryColor`** | <code>string</code> |
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
#### CustomEvent
|
|
198
|
+
|
|
199
|
+
| Prop | Type |
|
|
200
|
+
| --------------- | ------------------- |
|
|
201
|
+
| **`appId`** | <code>string</code> |
|
|
202
|
+
| **`requestId`** | <code>number</code> |
|
|
203
|
+
| **`type`** | <code>string</code> |
|
|
204
|
+
| **`errorType`** | <code>string</code> |
|
|
205
|
+
| **`payload`** | <code>object</code> |
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
#### PaymentEvent
|
|
209
|
+
|
|
210
|
+
| Prop | Type |
|
|
211
|
+
| ---------------------- | ------------------- |
|
|
212
|
+
| **`appId`** | <code>string</code> |
|
|
213
|
+
| **`transactionToken`** | <code>string</code> |
|
|
214
|
+
| **`miniappOrderId`** | <code>string</code> |
|
|
215
|
+
| **`amount`** | <code>number</code> |
|
|
216
|
+
| **`currency`** | <code>string</code> |
|
|
217
|
+
| **`status`** | <code>string</code> |
|
|
218
|
+
| **`hostappOrderId`** | <code>string</code> |
|
|
219
|
+
| **`extraParams`** | <code>object</code> |
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
#### MiniappListResult
|
|
223
|
+
|
|
224
|
+
| Prop | Type |
|
|
225
|
+
| -------------- | -------------------------- |
|
|
226
|
+
| **`miniapps`** | <code>[MiniappData]</code> |
|
|
227
|
+
| **`error`** | <code>string</code> |
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
#### MiniappData
|
|
231
|
+
|
|
232
|
+
| Prop | Type |
|
|
233
|
+
| ----------------- | ------------------- |
|
|
234
|
+
| **`appId`** | <code>string</code> |
|
|
235
|
+
| **`name`** | <code>string</code> |
|
|
236
|
+
| **`category`** | <code>string</code> |
|
|
237
|
+
| **`description`** | <code>string</code> |
|
|
238
|
+
| **`logo`** | <code>string</code> |
|
|
239
|
+
|
|
240
|
+
</docgen-api>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
ext {
|
|
2
|
+
junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
|
|
3
|
+
androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
|
|
4
|
+
androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
|
|
5
|
+
androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
buildscript {
|
|
9
|
+
ext {
|
|
10
|
+
kotlin_version = '1.9.22'
|
|
11
|
+
}
|
|
12
|
+
repositories {
|
|
13
|
+
google()
|
|
14
|
+
mavenCentral()
|
|
15
|
+
}
|
|
16
|
+
dependencies {
|
|
17
|
+
classpath 'com.android.tools.build:gradle:8.2.2'
|
|
18
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
apply plugin: 'com.android.library'
|
|
23
|
+
apply plugin: 'kotlin-android'
|
|
24
|
+
|
|
25
|
+
android {
|
|
26
|
+
namespace "io.boxo.sdk.capacitor"
|
|
27
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
|
|
28
|
+
defaultConfig {
|
|
29
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
|
|
30
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
|
|
31
|
+
versionCode 1
|
|
32
|
+
versionName "1.0"
|
|
33
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
34
|
+
}
|
|
35
|
+
buildTypes {
|
|
36
|
+
release {
|
|
37
|
+
minifyEnabled false
|
|
38
|
+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
lintOptions {
|
|
42
|
+
abortOnError false
|
|
43
|
+
}
|
|
44
|
+
compileOptions {
|
|
45
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
46
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
47
|
+
}
|
|
48
|
+
kotlinOptions {
|
|
49
|
+
jvmTarget = '17'
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
repositories {
|
|
54
|
+
google()
|
|
55
|
+
mavenCentral()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
rootProject.allprojects {
|
|
59
|
+
repositories {
|
|
60
|
+
maven { url "https://jitpack.io" }
|
|
61
|
+
jcenter()
|
|
62
|
+
maven {
|
|
63
|
+
url "https://maven.pkg.github.com/Appboxo/android-sdk-packages"
|
|
64
|
+
credentials {
|
|
65
|
+
username = "appboxoandroidsdk"
|
|
66
|
+
password = "\u0037\u0039\u0064\u0031\u0065\u0064\u0061\u0036\u0030\u0034\u0063\u0061\u0031\u0066\u0030\u0032\u0066\u0031\u0037\u0066\u0032\u0061\u0039\u0033\u0064\u0035\u0039\u0039\u0061\u0035\u0035\u0062\u0066\u0065\u0031\u0064\u0066\u0064\u0038\u0038"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
dependencies {
|
|
73
|
+
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
74
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
75
|
+
implementation project(':capacitor-android')
|
|
76
|
+
implementation('com.appboxo:sdk:1.5.7') {
|
|
77
|
+
exclude group: 'com.google.android.gms', module: 'play-services-location'
|
|
78
|
+
}
|
|
79
|
+
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
80
|
+
testImplementation "junit:junit:$junitVersion"
|
|
81
|
+
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
82
|
+
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
83
|
+
|
|
84
|
+
}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
package io.boxo.sdk.capacitor
|
|
2
|
+
|
|
3
|
+
import android.os.Handler
|
|
4
|
+
import android.os.Looper
|
|
5
|
+
import com.appboxo.data.models.MiniappData
|
|
6
|
+
import com.appboxo.js.params.CustomEvent
|
|
7
|
+
import com.appboxo.js.params.PaymentData
|
|
8
|
+
import com.appboxo.sdk.Appboxo
|
|
9
|
+
import com.appboxo.sdk.Config
|
|
10
|
+
import com.appboxo.sdk.Miniapp
|
|
11
|
+
import com.appboxo.sdk.MiniappConfig
|
|
12
|
+
import com.appboxo.sdk.MiniappListCallback
|
|
13
|
+
import com.appboxo.ui.main.AppboxoActivity
|
|
14
|
+
import com.getcapacitor.JSArray
|
|
15
|
+
import com.getcapacitor.JSObject
|
|
16
|
+
import com.getcapacitor.Plugin
|
|
17
|
+
import com.getcapacitor.PluginCall
|
|
18
|
+
import com.getcapacitor.PluginMethod
|
|
19
|
+
import com.getcapacitor.annotation.CapacitorPlugin
|
|
20
|
+
|
|
21
|
+
@CapacitorPlugin(name = "Appboxo")
|
|
22
|
+
class AppboxoPlugin : Plugin(), Miniapp.LifecycleListener,
|
|
23
|
+
Miniapp.CustomEventListener, Miniapp.AuthListener,
|
|
24
|
+
Miniapp.PaymentEventListener {
|
|
25
|
+
|
|
26
|
+
private var handler: Handler? = null
|
|
27
|
+
|
|
28
|
+
override fun load() {
|
|
29
|
+
super.load()
|
|
30
|
+
Appboxo.init(bridge.activity.application)
|
|
31
|
+
handler = Handler(Looper.getMainLooper())
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@PluginMethod
|
|
35
|
+
fun setConfig(call: PluginCall) {
|
|
36
|
+
val clientId = call.getString("clientId")!!
|
|
37
|
+
val userId = call.getString("userId") ?: ""
|
|
38
|
+
val sandboxMode = call.getBoolean("sandboxMde", false)!!
|
|
39
|
+
val enableMultitaskMode = call.getBoolean("enableMultitaskMode", false)!!
|
|
40
|
+
val theme = call.getString("theme", "system")!!
|
|
41
|
+
val isDebug = call.getBoolean("isDebug", false)!!
|
|
42
|
+
val showPermissionsPage = call.getBoolean("showPermissionsPage", true)!!
|
|
43
|
+
val showClearCache = call.getBoolean("showClearCache", true)!!
|
|
44
|
+
val globalTheme: Config.Theme = when (theme) {
|
|
45
|
+
"light" -> Config.Theme.LIGHT
|
|
46
|
+
"dark" -> Config.Theme.DARK
|
|
47
|
+
else -> Config.Theme.SYSTEM
|
|
48
|
+
}
|
|
49
|
+
Appboxo
|
|
50
|
+
.setConfig(
|
|
51
|
+
Config.Builder()
|
|
52
|
+
.setClientId(clientId)
|
|
53
|
+
.setUserId(userId)
|
|
54
|
+
.sandboxMode(sandboxMode)
|
|
55
|
+
.multitaskMode(enableMultitaskMode)
|
|
56
|
+
.setTheme(globalTheme)
|
|
57
|
+
.permissionsPage(showPermissionsPage)
|
|
58
|
+
.showClearCache(showClearCache)
|
|
59
|
+
.debug(isDebug)
|
|
60
|
+
.build()
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@PluginMethod
|
|
65
|
+
fun openMiniapp(call: PluginCall) {
|
|
66
|
+
val appId = call.getString("appId")!!
|
|
67
|
+
val data = call.getObject("data")
|
|
68
|
+
val theme = call.getString("theme")
|
|
69
|
+
val extraUrlParams = call.getObject("extraUrlParams")
|
|
70
|
+
val urlSuffix = call.getString("urlSuffix")
|
|
71
|
+
val colors = call.getObject("colors")
|
|
72
|
+
val enableSplash = call.getBoolean("enableSplash")
|
|
73
|
+
val miniapp: Miniapp = Appboxo.getMiniapp(appId)
|
|
74
|
+
.setCustomEventListener(this)
|
|
75
|
+
.setPaymentEventListener(this)
|
|
76
|
+
.setAuthListener(this)
|
|
77
|
+
.setLifecycleListener(this)
|
|
78
|
+
if (data != null) miniapp.setData(data.toMap())
|
|
79
|
+
val configBuilder = MiniappConfig.Builder()
|
|
80
|
+
if (theme != null) {
|
|
81
|
+
val miniappTheme: Config.Theme? = when (theme) {
|
|
82
|
+
"light" -> Config.Theme.LIGHT
|
|
83
|
+
"dark" -> Config.Theme.DARK
|
|
84
|
+
"system" -> Config.Theme.SYSTEM
|
|
85
|
+
else -> null
|
|
86
|
+
}
|
|
87
|
+
if (miniappTheme != null) {
|
|
88
|
+
configBuilder.setTheme(miniappTheme)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (extraUrlParams != null) {
|
|
92
|
+
val map: Map<String, Any> = extraUrlParams.toMap()
|
|
93
|
+
val stringMap: MutableMap<String, String> = HashMap()
|
|
94
|
+
for ((key, value) in map) stringMap[key] = value.toString()
|
|
95
|
+
configBuilder.setExtraUrlParams(stringMap)
|
|
96
|
+
}
|
|
97
|
+
urlSuffix?.also { suffix -> configBuilder.setUrlSuffix(suffix) }
|
|
98
|
+
if (colors != null) {
|
|
99
|
+
configBuilder.setColors(
|
|
100
|
+
colors.getString("primaryColor") ?: "",
|
|
101
|
+
colors.getString("secondaryColor") ?: "",
|
|
102
|
+
colors.getString("tertiaryColor") ?: "",
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
if (enableSplash != null)
|
|
106
|
+
configBuilder.enableSplash(enableSplash)
|
|
107
|
+
miniapp.setConfig(configBuilder.build())
|
|
108
|
+
miniapp.open(bridge.activity)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@PluginMethod
|
|
112
|
+
fun setAuthCode(call: PluginCall) {
|
|
113
|
+
val appId = call.getString("appId")!!
|
|
114
|
+
val authCode = call.getString("authCode")!!
|
|
115
|
+
Appboxo.getMiniapp(appId)
|
|
116
|
+
.setAuthCode(authCode)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
@PluginMethod
|
|
120
|
+
fun closeMiniapp(call: PluginCall) {
|
|
121
|
+
val appId = call.getString("appId")!!
|
|
122
|
+
handler?.post { Appboxo.getExistingMiniapp(appId)?.close() }
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
override fun handle(
|
|
126
|
+
miniAppActivity: AppboxoActivity,
|
|
127
|
+
miniapp: Miniapp,
|
|
128
|
+
customEvent: CustomEvent
|
|
129
|
+
) {
|
|
130
|
+
val params = JSObject()
|
|
131
|
+
params.put("appId", miniapp.appId)
|
|
132
|
+
try {
|
|
133
|
+
params.put("requestId", customEvent.requestId ?: 0)
|
|
134
|
+
params.put("type", customEvent.type)
|
|
135
|
+
params.put("errorType", customEvent.errorType)
|
|
136
|
+
params.put("payload", customEvent.payload)
|
|
137
|
+
sendEvent(CUSTOM_EVENTS_EVENT_NAME, params)
|
|
138
|
+
} catch (e: Exception) {
|
|
139
|
+
e.printStackTrace()
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
override fun onLaunch(miniapp: Miniapp) {
|
|
144
|
+
val params = JSObject()
|
|
145
|
+
params.put("appId", miniapp.appId)
|
|
146
|
+
params.put("lifecycle", "onLaunch")
|
|
147
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
override fun onResume(miniapp: Miniapp) {
|
|
151
|
+
val params = JSObject()
|
|
152
|
+
params.put("appId", miniapp.appId)
|
|
153
|
+
params.put("lifecycle", "onResume")
|
|
154
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
override fun onPause(miniapp: Miniapp) {
|
|
158
|
+
val params = JSObject()
|
|
159
|
+
params.put("appId", miniapp.appId)
|
|
160
|
+
params.put("lifecycle", "onPause")
|
|
161
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
override fun onClose(miniapp: Miniapp) {
|
|
165
|
+
val params = JSObject()
|
|
166
|
+
params.put("appId", miniapp.appId)
|
|
167
|
+
params.put("lifecycle", "onClose")
|
|
168
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
override fun onError(miniapp: Miniapp, message: String) {
|
|
172
|
+
val params = JSObject()
|
|
173
|
+
params.put("appId", miniapp.appId)
|
|
174
|
+
params.put("lifecycle", "onError")
|
|
175
|
+
params.put("error", message)
|
|
176
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
override fun onUserInteraction(miniapp: Miniapp) {
|
|
180
|
+
val params = JSObject()
|
|
181
|
+
params.put("appId", miniapp.appId)
|
|
182
|
+
params.put("lifecycle", "onUserInteraction")
|
|
183
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
override fun onAuth(appboxoActivity: AppboxoActivity, miniapp: Miniapp) {
|
|
187
|
+
val params = JSObject()
|
|
188
|
+
params.put("appId", miniapp.appId)
|
|
189
|
+
params.put("lifecycle", "onAuth")
|
|
190
|
+
sendEvent(MINIAPP_LIFECYCLE_EVENT_NAME, params)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@PluginMethod
|
|
194
|
+
fun sendCustomEvent(call: PluginCall) {
|
|
195
|
+
try {
|
|
196
|
+
val appId: String = call.getString("appId")!!
|
|
197
|
+
val event = CustomEvent(
|
|
198
|
+
call.getInt("requestId"),
|
|
199
|
+
call.getString("type")!!,
|
|
200
|
+
call.getString("errorType"),
|
|
201
|
+
call.getObject("payload")?.toMap() ?: emptyMap()
|
|
202
|
+
)
|
|
203
|
+
handler?.post { Appboxo.getExistingMiniapp(appId)?.sendEvent(event) }
|
|
204
|
+
} catch (e: Exception) {
|
|
205
|
+
e.printStackTrace()
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@PluginMethod
|
|
210
|
+
fun sendPaymentEvent(call: PluginCall) {
|
|
211
|
+
try {
|
|
212
|
+
val appId: String = call.getString("appId")!!
|
|
213
|
+
val data = PaymentData(
|
|
214
|
+
call.getString("transactionToken") ?: "",
|
|
215
|
+
call.getString("miniappOrderId") ?: "",
|
|
216
|
+
call.getDouble("amount") ?: 0.0,
|
|
217
|
+
call.getString("currency") ?: "",
|
|
218
|
+
call.getString("status") ?: "",
|
|
219
|
+
call.getString("hostappOrderId") ?: "",
|
|
220
|
+
call.getObject("extraParams")?.toMap()
|
|
221
|
+
)
|
|
222
|
+
handler?.post { Appboxo.getExistingMiniapp(appId)?.sendPaymentResult(data) }
|
|
223
|
+
} catch (e: Exception) {
|
|
224
|
+
e.printStackTrace()
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@PluginMethod
|
|
229
|
+
fun getMiniapps(call: PluginCall) {
|
|
230
|
+
Appboxo.getMiniapps(object : MiniappListCallback {
|
|
231
|
+
override fun onSuccess(miniapps: List<MiniappData>) {
|
|
232
|
+
try {
|
|
233
|
+
val list = JSArray()
|
|
234
|
+
for (i in miniapps.indices) {
|
|
235
|
+
val miniappData: MiniappData = miniapps[i]
|
|
236
|
+
val data = JSObject()
|
|
237
|
+
data.put("appId", miniappData.appId)
|
|
238
|
+
data.put("name", miniappData.name)
|
|
239
|
+
data.put("category", miniappData.category)
|
|
240
|
+
data.put("logo", miniappData.logo)
|
|
241
|
+
data.put("description", miniappData.description)
|
|
242
|
+
list.put(data)
|
|
243
|
+
}
|
|
244
|
+
val params = JSObject()
|
|
245
|
+
params.put("miniapps", list)
|
|
246
|
+
call.resolve(params)
|
|
247
|
+
} catch (e: Exception) {
|
|
248
|
+
e.printStackTrace()
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
override fun onFailure(e: Exception) {
|
|
253
|
+
val result = JSObject()
|
|
254
|
+
result.put("error", e.message)
|
|
255
|
+
call.resolve(result)
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
@PluginMethod
|
|
261
|
+
fun hideMiniapps(call: PluginCall) {
|
|
262
|
+
Appboxo.hideMiniapps()
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
@PluginMethod
|
|
266
|
+
fun logout(call: PluginCall) {
|
|
267
|
+
Appboxo.logout()
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private fun sendEvent(name: String, data: JSObject) {
|
|
271
|
+
notifyListeners(name, data)
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
override fun handle(
|
|
275
|
+
miniAppActivity: AppboxoActivity,
|
|
276
|
+
miniapp: Miniapp,
|
|
277
|
+
paymentData: PaymentData
|
|
278
|
+
) {
|
|
279
|
+
val params = JSObject()
|
|
280
|
+
params.put("appId", miniapp.appId)
|
|
281
|
+
try {
|
|
282
|
+
params.put("transactionToken", paymentData.transactionToken)
|
|
283
|
+
params.put("miniappOrderId", paymentData.miniappOrderId)
|
|
284
|
+
params.put("amount", paymentData.amount)
|
|
285
|
+
params.put("currency", paymentData.currency)
|
|
286
|
+
params.put("status", paymentData.status)
|
|
287
|
+
params.put("hostappOrderId", paymentData.hostappOrderId)
|
|
288
|
+
if (paymentData.extraParams != null) {
|
|
289
|
+
params.put("extraParams", paymentData.extraParams)
|
|
290
|
+
}
|
|
291
|
+
sendEvent(PAYMENT_EVENTS_EVENT_NAME, params)
|
|
292
|
+
} catch (e: Exception) {
|
|
293
|
+
e.printStackTrace()
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
companion object {
|
|
298
|
+
private const val CUSTOM_EVENTS_EVENT_NAME = "custom_event"
|
|
299
|
+
private const val PAYMENT_EVENTS_EVENT_NAME = "payment_event"
|
|
300
|
+
private const val MINIAPP_LIFECYCLE_EVENT_NAME = "miniapp_lifecycle"
|
|
301
|
+
|
|
302
|
+
fun JSObject.toMap(): Map<String, Any> {
|
|
303
|
+
val map: MutableMap<String, Any> = HashMap()
|
|
304
|
+
val iterator: Iterator<String> = this.keys()
|
|
305
|
+
|
|
306
|
+
while (iterator.hasNext()) {
|
|
307
|
+
val key = iterator.next()
|
|
308
|
+
var value: Any = this.get(key)
|
|
309
|
+
|
|
310
|
+
if (value is JSObject) {
|
|
311
|
+
value = value.toMap()
|
|
312
|
+
}
|
|
313
|
+
if (value is JSArray) {
|
|
314
|
+
value = value.toList<Any>()
|
|
315
|
+
}
|
|
316
|
+
map[key] = value
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return map
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|