diff --git a/app/src/main/java/com/unibuy/smartdevice/MyApp.java b/app/src/main/java/com/unibuy/smartdevice/MyApp.java
index 6009a86..e920199 100644
--- a/app/src/main/java/com/unibuy/smartdevice/MyApp.java
+++ b/app/src/main/java/com/unibuy/smartdevice/MyApp.java
@@ -440,6 +440,9 @@ public class MyApp extends Application {
logs.info("initialSettingData Machine:" + setting.toString());
MyApp.getInstance().getMachine().setApiKey(setting.getData(0));
MyApp.getInstance().getMachine().setMachineID(setting.getData(1));
+ if (setting.getDataCount() >= 3 && setting.getData(2) != null && !setting.getData(2).isEmpty()) {
+ MyApp.getInstance().getMachine().setMqttEnv(setting.getData(2));
+ }
}
}
diff --git a/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java b/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java
index 80310bd..e4a004e 100644
--- a/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java
+++ b/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java
@@ -35,8 +35,13 @@ import java.util.ArrayList;
public class StarCloudAPI {
private static final String TAG = "StarCloudAPI";
- // Star-Cloud API 基礎路徑
- private static final String BASE_URL = "https://demo-cloud.setdomains.work/api/v1/app/";
+ private String getBaseUrl() {
+ if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
+ return "https://starcloud.taiwan-star.com.tw/api/v1/app/";
+ } else {
+ return "https://demo-cloud.setdomains.work/api/v1/app/";
+ }
+ }
private HandlerMain handlerMain;
private HandlerMain srcHandlerMain;
@@ -51,7 +56,7 @@ public class StarCloudAPI {
*/
public void login(final String account, final String password) {
Log.i(TAG, "login() called for account: " + account);
- final String url = BASE_URL + "admin/login/B000";
+ final String url = getBaseUrl() + "admin/login/B000";
Log.i(TAG, "Starting B000 request to: " + url);
// 不依賴 FormPostMainScheduler (會靜默吞掉 IO exception)
@@ -156,7 +161,7 @@ public class StarCloudAPI {
return;
}
- final String url = BASE_URL + "machine/setting/B014?machine=" + machineId;
+ final String url = getBaseUrl() + "machine/setting/B014?machine=" + machineId;
Log.i(TAG, "Starting B014 request to: " + url);
new Thread(new Runnable() {
@@ -242,7 +247,7 @@ public class StarCloudAPI {
* 需要 Bearer Token 認證。
*/
public void downloadProductInfo() {
- final String url = BASE_URL + "machine/products/B012";
+ final String url = getBaseUrl() + "machine/products/B012";
Log.i(TAG, "Starting B012 request to: " + url);
new Thread(new Runnable() {
@@ -336,7 +341,7 @@ public class StarCloudAPI {
* 需要 Bearer Token 認證。
*/
public void reportSlotList(final ReportSlotListStructure data) {
- final String url = BASE_URL + "products/supplementary/B009";
+ final String url = getBaseUrl() + "products/supplementary/B009";
Log.i(TAG, "Starting B009 request to: " + url);
new Thread(new Runnable() {
@@ -449,7 +454,7 @@ public class StarCloudAPI {
*/
public void verifyStaffCard(final String cardNo, final VerificationCallback callback) {
final String machineId = MyApp.getInstance().getMachine().getMachineID();
- final String url = BASE_URL + "machine/staff/verify/B680";
+ final String url = getBaseUrl() + "machine/staff/verify/B680";
Log.i(TAG, "Starting B680 request for card: " + cardNo);
new Thread(new Runnable() {
@@ -595,7 +600,8 @@ public class StarCloudAPI {
settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getMachine().getClass().getSimpleName(),
new String[] {
MyApp.getInstance().getMachine().getApiKey(),
- MyApp.getInstance().getMachine().getMachineID()
+ MyApp.getInstance().getMachine().getMachineID(),
+ MyApp.getInstance().getMachine().getMqttEnv()
}));
settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getEsunpay().getClass().getSimpleName(),
@@ -689,7 +695,7 @@ public class StarCloudAPI {
}
public void downloadAdvertisement(final Runnable onComplete) {
- final String url = BASE_URL + "machine/ad/B005";
+ final String url = getBaseUrl() + "machine/ad/B005";
Log.i(TAG, "Starting B005 request to: " + url);
new Thread(new Runnable() {
diff --git a/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java b/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java
index ef339bc..f062808 100644
--- a/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java
+++ b/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java
@@ -78,10 +78,15 @@ public class MqttManager {
}
}
+ String serverHost = "mqtt.setdomains.work";
+ if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
+ serverHost = "emqx.taiwan-star.com.tw";
+ }
+
client = MqttClient.builder()
.useMqttVersion3()
.identifier(clientId)
- .serverHost("mqtt.setdomains.work")
+ .serverHost(serverHost)
.serverPort(443)
.useSslWithDefaultConfig()
.webSocketConfig()
diff --git a/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java b/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java
index 10d5e76..b6d3cc8 100644
--- a/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java
+++ b/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java
@@ -3,6 +3,7 @@ package com.unibuy.smartdevice.structure;
public class MachineStructure {
private String apiKey = "KahnEwjhfDBHUYS7";
private String machineID;
+ private String mqttEnv = "demo";
public MachineStructure(String machineID) {
this.machineID = machineID;
}
@@ -27,4 +28,12 @@ public class MachineStructure {
public void setMachineID(String machineID) {
this.machineID = machineID;
}
+
+ public String getMqttEnv() {
+ return mqttEnv;
+ }
+
+ public void setMqttEnv(String mqttEnv) {
+ this.mqttEnv = mqttEnv;
+ }
}
diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java b/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java
index 563b37d..659ac00 100644
--- a/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java
+++ b/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java
@@ -96,6 +96,11 @@ public class SettingActivity extends AppCompatActivityAbstract {
case DATA_RELOAD:
binding.buttonBack.setVisibility(View.INVISIBLE);
MyApp.getInstance().getMachine().setMachineID(binding.editMachineID.getText().toString());
+ if (binding.radioProd.isChecked()) {
+ MyApp.getInstance().getMachine().setMqttEnv("prod");
+ } else {
+ MyApp.getInstance().getMachine().setMqttEnv("demo");
+ }
binding.progressLayout.setVisibility(View.VISIBLE); // 確保進度條顯示
try {
starCloudAPI.downloadSetting();
@@ -167,6 +172,12 @@ public class SettingActivity extends AppCompatActivityAbstract {
binding.buttonReload.setText("重新綁定");
}
+ if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) {
+ binding.radioProd.setChecked(true);
+ } else {
+ binding.radioDemo.setChecked(true);
+ }
+
if (statusList.isEmpty()) {
SettinglogsDao settinglogsDao = new SettinglogsDao(this);
for (String data : settinglogsDao.getAll()) {
diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml
index e5b3dde..6bf830d 100644
--- a/app/src/main/res/layout/activity_setting.xml
+++ b/app/src/main/res/layout/activity_setting.xml
@@ -29,13 +29,36 @@
android:inputType="text" />
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/radioGroupMqttEnv">