Skip to content

Commit a3d67f9

Browse files
authored
fix(android): align sync storage APIs with WeChat behavior (#190)
* fix(ios): align storage sync bridge params * fix(storage): align getStorageSync with WeChat behavior and add Object type support Return empty string instead of null/nil when key doesn't exist, matching WeChat official behavior. Applied to iOS and Android. Also add JSONObject/JSONArray support in Android storage set/get and getStorageSync return to preserve structured data types.
1 parent 65e44a1 commit a3d67f9

2 files changed

Lines changed: 20 additions & 15 deletions

File tree

android/dimina/src/main/kotlin/com/didi/dimina/api/storage/StorageApi.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,9 @@ class StorageApi : BaseApiHandler() {
6969
is Double -> SyncResult(JSValue.createNumber(value))
7070
is Float -> SyncResult(JSValue.createNumber(value.toDouble()))
7171
is Boolean -> SyncResult(JSValue.createBoolean(value))
72-
else -> SyncResult(JSValue.createNull())
72+
is JSONArray -> SyncResult(JSValue.createObject(value.toString()))
73+
is JSONObject -> SyncResult(JSValue.createObject(value.toString()))
74+
else -> SyncResult(JSValue.createString(""))
7375
}
7476
}
7577

@@ -192,6 +194,11 @@ class StorageApi : BaseApiHandler() {
192194
storage.encode(typeKey, "Array")
193195
}
194196

197+
is JSONObject -> {
198+
storage.encode(key, data.toString())
199+
storage.encode(typeKey, "Object")
200+
}
201+
195202
is Any -> try {
196203
// For JSON-serializable objects
197204
storage.encode(key, data.toString())
@@ -223,6 +230,11 @@ class StorageApi : BaseApiHandler() {
223230
} catch (_: Exception) {
224231
storage.decodeString(key) // Fallback to String if parsing fails
225232
}
233+
"Object" -> try {
234+
JSONObject(storage.decodeString(key))
235+
} catch (_: Exception) {
236+
storage.decodeString(key) // Fallback to String if parsing fails
237+
}
226238
else -> storage.decodeString(key) // Fallback to String for unknown types
227239
}
228240
}

iOS/dimina/DiminaKit/Container/Api/Storage/StorageAPI.swift

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,26 @@ public class StorageAPI: DMPContainerApi {
3232
DMPStorage.shared.initialize()
3333
}
3434

35-
// Set storage synchronously
35+
// wx.setStorageSync(key, data) → params: [key, data]
3636
@BridgeMethod(SET_STORAGE_SYNC)
3737
var setStorageSync: DMPBridgeMethodHandler = { param, env, callback in
38-
let param = param.getMap()
39-
guard let key = param.get("key") as? String else { return DMPSyncResult(false) }
40-
let data = param.get("data")
41-
let encrypt = param.get("encrypt") as? Bool ?? false
42-
43-
guard let data = data else { return DMPSyncResult(false) }
44-
45-
let result = DMPStorage.shared.set(key: key, value: data, encrypted: encrypt)
46-
return DMPSyncResult(result)
38+
guard let array = param.getValue() as? [Any], array.count >= 2,
39+
let key = array[0] as? String else { return DMPSyncResult(false) }
40+
return DMPSyncResult(DMPStorage.shared.set(key: key, value: array[1], encrypted: false))
4741
}
4842

49-
// Get storage synchronously
43+
// wx.getStorageSync(key) → params: key string
5044
@BridgeMethod(GET_STORAGE_SYNC)
5145
var getStorageSync: DMPBridgeMethodHandler = { param, env, callback in
5246
guard let key = param.getValue() as? String else { return DMPNoneResult() }
5347
let value = DMPStorage.shared.get(key: key, encrypted: false)
54-
return DMPSyncResult(value)
48+
return DMPSyncResult(value ?? "")
5549
}
5650

57-
// Remove storage synchronously
51+
// wx.removeStorageSync(key) → params: key string
5852
@BridgeMethod(REMOVE_STORAGE_SYNC)
5953
var removeStorageSync: DMPBridgeMethodHandler = { param, env, callback in
6054
guard let key = param.getValue() as? String else { return DMPSyncResult(false) }
61-
6255
DMPStorage.shared.remove(key: key, encrypted: false)
6356
return DMPSyncResult(true)
6457
}

0 commit comments

Comments
 (0)