userinfo
Web Call Example
{
"name": "userinfo",
"data": null
}App return
Account
id: User Unique ID
stringaccount: User Account
stringusername: Username
stringrealName: Real Name
stringidNo: ID Number
stringemail: Email
stringphoneNo: Mobile Number
stringbirthday: Birthday
stringmemberType: Membership Type
string"personal": Regular Member
"organization": Organizational Member "foreigner": Foreign National "employee": Taipei City Government EmployeeverifyLevel: Member Verification Level
string0: Unverified
> Greater Than 0: Real Name Verifiedaddresses: Mailing Address
array[Address]Address:
zip3: Postal Code
intcity: Township/City
stringtown: Urban Area
stringvillage: Neighborhood
stringstreet: Street
stringusageType: Label Type
string0: Other
> 1: Home
> 2: Companyseq: Serial Number
intpriority: Is Default Address
bool
residentAddress: Registered Address
stringcitizen: Is Taipei Citizen
boolnativePeople: Is Indigenous
boolcityInternetUid: Old Online Citizen ID
string
App return example
{
"name": "userinfo",
"data": {
"id": "7f3562f4-bb3f-4ec7-89b9-da3b4b5ff250",
"account": "wz7786",
"username": "Wesley",
"realName": "金大森",
"idNo": "A123456789",
"email": "ist83903@bcaoo.com",
"phoneNo": "0932166777",
"birthday": "1988/12/12",
"memberType": "personal",
"verifyLevel": "3",
"addresses": [
{
"zip3": 104,
"city": "臺北市",
"town": "中山區",
"village": "正得里",
"street": "吉林路",
"usageType": "0",
"seq": 1,
"priority": true
}
],
"residentAddress": "臺北市中山區吉林路 69 號 4 樓",
"citizen": true,
"nativePeople": false,
"cityInternetUid": ""
}
}launch_map
Web Call Example
{
"name": "launch_map",
"data": "https://maps.app.goo.gl/sQKx4n3WctXuS5Bw8"
}App return
- bool: Can the map feature be enabled?
App return example
{
"name": "launch_map",
"data": true
}phone_call
Web Call Example
{
"name": "phone_call",
"data": "02-1234-5678"
}App return
- bool: Can the phone feature be enabled?
App return example
{
"name": "phone_call",
"data": bool
}1999agree
Web Call Example
{
"name": "1999agree",
"data": true
}data must not be null. Its value does not change the behavior. The app always calls 1999.
App behavior
- If the user has not agreed to the phone call terms, the app opens the terms page first.
- After the user agrees, the app shows a "voice report" dialog. The call starts only when the user taps "call now".
App return
- The app does not reply when the dialog is shown.
- The app replies
falsewhen the device cannot make phone calls, or when the user does not agree to the terms.
App return example
{
"name": "1999agree",
"data": false
}location
Web Call Example
{
"name": "location",
"data": null
}App return
Position See details GeoLocator - Position
accuracy: Horizontal Accuracy (meters)
doublealtitude: Altitude (meters)
doublealtitude_accuracy: Altitude Accuracy (meters)
doublefloor: Floor
int, nullableheading: Heading While Moving
doubleheading_accuracy: Heading Accuracy While Moving (degrees)
doubleis_mocked: Is this simulated location data (Android API level 18 and later)
boollatitude: Latitude (-90.0 inclusive to +90.0 inclusive)
doublelongitude: Longitude (-180.0 exclusive to +180.0 inclusive)
doublespeed: Speed (meters/second)
doublespeed_accuracy: Speed Accuracy (meters/second)
doubletimestamp: Current Data Acquisition Time (ms)
intvertical_speed: Vertical speed (meters/second). Positive values mean ascending and negative values mean descending. The value is 0.0 when the device does not support it
doublevertical_speed_accuracy: Vertical speed accuracy (meters/second). The value is 0.0 when the device does not support it
doublehas_accuracy,has_altitude,has_altitude_accuracy,has_heading,has_heading_accuracy,has_speed,has_speed_accuracy,has_vertical_speed,has_vertical_speed_accuracy: Whether the platform actually reported the matching field. When false, the matching field is a 0.0 placeholder, not a measurement
bool
App return example
{
"name": "location",
"data": {
"longitude": -121.406417,
"latitude": 38.785834,
"timestamp": 1724466344054,
"accuracy": 5.0,
"altitude": 0.0,
"altitude_accuracy": 0.0,
"floor": null,
"heading": -1.0,
"heading_accuracy": -1.0,
"speed": 0.0,
"speed_accuracy": 0.0,
"is_mocked": true,
"vertical_speed": 0.0,
"vertical_speed_accuracy": 0.0,
"has_accuracy": true,
"has_altitude": true,
"has_altitude_accuracy": true,
"has_heading": false,
"has_heading_accuracy": false,
"has_speed": true,
"has_speed_accuracy": true,
"has_vertical_speed": false,
"has_vertical_speed_accuracy": false
}
}deviceinfo
Web Call Example
{
"name": "deviceinfo",
"data": null
}App return example
ios
For reference: UIDevice, utsname
{
"systemName": "iOS",
"isPhysicalDevice": false,
"utsname": {
"release": "23.6.0",
"sysname": "Darwin",
"nodename": "xxx-MBP",
"machine": "iPhone16,1",
"version": "Darwin Kernel Version xxx: ..."
},
"model": "iPhone",
"localizedModel": "iPhone",
"systemVersion": "17.x",
"name": "iPhone xxx",
"identifierForVendor": "xxx-xxx-xxxx-...",
"modelName": "iPhone 15 Pro",
"isiOSAppOnMac": false,
"isiOSAppOnVision": false,
"physicalRamSize": 8192,
"availableRamSize": 2048,
"freeDiskSize": 8593948672,
"totalDiskSize": 10411143168
}android
For reference: android.os.Build
{
"product": "sdk_gphone64_arm64",
"supportedAbis": [
"arm64-v8a"
],
"supported32BitAbis": [],
"display": "AP31.xxxx.xxx",
"type": "user",
"isPhysicalDevice": false,
"version": {
"baseOS": "",
"securityPatch": "2024-xx-xx",
"sdkInt": 34,
"release": "14",
"codename": "VanillaIceCream",
"previewSdkInt": 1,
"incremental": "11566045"
},
"systemFeatures": [
"android.hardware.sensor.proximity",
"android.software.adoptable_storage",
...
],
"manufacturer": "Google",
"tags": "release-keys",
"supported64BitAbis": [
"arm64-v8a"
],
"bootloader": "unknown",
"fingerprint": "google/sdk_gphone64_arm64/...",
"host": "x-xxx-...",
"isLowRamDevice": false,
"model": "sdk_gphone64_arm64",
"id": "AP31.xxxx.xxx",
"brand": "google",
"device": "emu64a",
"board": "goldfish_arm64",
"hardware": "xxxxxx",
"name": "xxx",
"time": 1724466344000,
"physicalRamSize": 3967,
"availableRamSize": 1536,
"freeDiskSize": 8593948672,
"totalDiskSize": 10411143168
}open_link
Web Call Example
{
"name": "open_link",
"data": "https://www.gov.taipei/"
}App behavior
When data is a URL string, the app opens the URL in the built-in WebView.
App return
- The app does not reply when the link opens.
- The app replies
falsewhendataisnull.
App return example
{
"name": "open_link",
"data": false
}notify
Web Call Example
{
"name": "notify",
"data": {
"title": "Subscription",
"content": "已取消訂閱xxx"
}
}App behavior
- The app sends a phone notification with
titleandcontent. - When
contentmatches已訂閱xxx("subscribed to xxx"), the app addsxxxto the subscription list. - When
contentmatches已取消訂閱xxx("unsubscribed from xxx"), the app removesxxxfrom the subscription list.
TIP
The app matches the Chinese text above. Content in other languages still shows a notification, but does not change the subscription list.
App return
- The app does not reply when the notification is sent.
- The app replies
falsewhendatais not an object.
App return example
{
"name": "notify",
"data": false
}qr_code_scan
Web Call Example
{
"name": "qr_code_scan",
"data": null
}App behavior
The app opens the QR code scan page. After a code is scanned or the user goes back, the app closes the scan page and replies with the result.
App return
- string: The scanned content
- null: The user went back without scanning
App return example
{
"name": "qr_code_scan",
"data": "https://www.gov.taipei/"
}