Browse Source

change device_id to origin

main
MTing 2 weeks ago
parent
commit
abc2ce6364
  1. 93
      app/src/main/java/com/ouxuan/oxface/MainActivity.java
  2. 278
      app/src/main/java/com/ouxuan/oxface/data/LoginDataManager.java
  3. 95
      app/src/main/java/com/ouxuan/oxface/device/DeviceUtils.java

93
app/src/main/java/com/ouxuan/oxface/MainActivity.java

@ -23,6 +23,8 @@ import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.request.RequestOptions;
import com.ouxuan.oxface.data.LoginDataManager;
import com.ouxuan.oxface.device.DeviceUtils;
import com.ouxuan.oxface.network.api.PadApiService;
import com.ouxuan.oxface.network.api.UserApiService;
import com.ouxuan.oxface.network.callback.NetworkCallback;
@ -36,7 +38,7 @@ public class MainActivity extends AppCompatActivity {
private ImageView imageViewPasswordToggle;
private Toast currentToast; // 用于管理Toast显示状态
private boolean isPasswordVisible = false; // 密码显示状态
private PadApiService.PadLoginResponse currentLoginData; // 当前登录响应数据
private LoginDataManager loginDataManager; // 登录数据管理器
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -54,6 +56,9 @@ public class MainActivity extends AppCompatActivity {
// 初始化视图组件
initViews();
// 初始化登录数据管理器
loginDataManager = LoginDataManager.getInstance(this);
// 设置登录按钮点击事件
setupLoginButton();
@ -162,9 +167,11 @@ public class MainActivity extends AppCompatActivity {
}
private void performLogin(String username, String password) {
// 使用Pad登录接口进行真实的API调用
String deviceId = "ANDROID_" + android.provider.Settings.Secure.getString(
getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
// 使用DeviceUtils获取设备ID进行真实的API调用
String deviceId = DeviceUtils.getFormattedDeviceId(this);
// 打印设备信息到日志便于调试
DeviceUtils.logDeviceInfo(this);
NetworkUtils.padLogin(username, password, deviceId, new NetworkCallback<PadApiService.PadLoginResponse>() {
@Override
@ -175,7 +182,7 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onSuccess(PadApiService.PadLoginResponse data) {
// 登录成功保存token和用户信息
// 登录成功使用LoginDataManager保存登录数据
android.util.Log.d("MainActivity", "Login success - data: " + (data != null ? data.toString() : "null"));
if (data != null) {
android.util.Log.d("MainActivity", "Token: " + data.getToken());
@ -183,12 +190,11 @@ public class MainActivity extends AppCompatActivity {
android.util.Log.d("MainActivity", "Brand ID: " + data.getBrandId());
}
// 保存登录响应数据
currentLoginData = data;
saveAuthToken(data.getToken());
saveUserInfo(data.getUserInfo());
saveSessionId(data.getSessionId());
// 使用LoginDataManager保存登录数据
loginDataManager.saveLoginData(data);
// 打印存储的data
android.util.Log.d("MainActivity", "Login Data: " + data.toString());
// 显示登录成功弹框传入登录数据
showToast("登录成功!");
@ -387,61 +393,11 @@ public class MainActivity extends AppCompatActivity {
}
/**
* 保存认证Token
* @param token 认证Token
*/
private void saveAuthToken(String token) {
getSharedPreferences("app_prefs", MODE_PRIVATE)
.edit()
.putString("auth_token", token)
.apply();
}
/**
* 获取认证Token
* @return 认证Token
*/
private String getAuthToken() {
return getSharedPreferences("app_prefs", MODE_PRIVATE)
.getString("auth_token", "");
}
/**
* 保存用户信息
* @param userInfo 用户信息
*/
private void saveUserInfo(PadApiService.UserInfo userInfo) {
if (userInfo != null) {
getSharedPreferences("app_prefs", MODE_PRIVATE)
.edit()
.putString("user_id", userInfo.getUserId())
.putString("username", userInfo.getUsername())
.putString("nickname", userInfo.getNickname())
.putString("store_id", userInfo.getStoreId())
.putString("store_name", userInfo.getStoreName())
.putString("role", userInfo.getRole())
.apply();
}
}
/**
* 保存会话ID
* @param sessionId 会话ID
*/
private void saveSessionId(String sessionId) {
getSharedPreferences("app_prefs", MODE_PRIVATE)
.edit()
.putString("session_id", sessionId)
.apply();
}
/**
* 获取用户ID
* @return 用户ID
*/
private String getUserId() {
return getSharedPreferences("app_prefs", MODE_PRIVATE)
.getString("user_id", "");
return loginDataManager.getUserId();
}
/**
@ -449,8 +405,7 @@ public class MainActivity extends AppCompatActivity {
* @return 会话ID
*/
private String getSessionId() {
return getSharedPreferences("app_prefs", MODE_PRIVATE)
.getString("session_id", "");
return loginDataManager.getSessionId();
}
/**
@ -466,11 +421,10 @@ public class MainActivity extends AppCompatActivity {
spinner.setAdapter(loadingAdapter);
// 调用API获取Pad列表传入登录时获取的stadium_iddevice_id和token
if (currentLoginData != null) {
int stadiumId = currentLoginData.getStadiumId();
String token = currentLoginData.getToken();
String deviceId = "ANDROID_" + android.provider.Settings.Secure.getString(
getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
if (loginDataManager.isLoggedIn()) {
int stadiumId = loginDataManager.getStadiumId();
String token = loginDataManager.getAuthToken();
String deviceId = DeviceUtils.getFormattedDeviceId(this);
android.util.Log.d("MainActivity", "Loading pad list with stadium_id: " + stadiumId +
", device_id: " + deviceId + ", token: " + (token != null ? "present" : "null"));
@ -485,6 +439,7 @@ public class MainActivity extends AppCompatActivity {
public void onSuccess(PadApiService.PadListResponse data) {
// 加载成功更新下拉框数据
java.util.List<PadApiService.PadInfo> padList = data.getPadList();
java.util.List<String> padNames = new java.util.ArrayList<>();
padNames.add("请选择设备"); // 默认选项

278
app/src/main/java/com/ouxuan/oxface/data/LoginDataManager.java

@ -0,0 +1,278 @@
package com.ouxuan.oxface.data;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import com.google.gson.Gson;
import com.ouxuan.oxface.network.api.PadApiService;
/**
* 登录数据管理器
* 单例模式用于全局存储和管理登录相关数据
* 支持内存缓存和持久化存储
*/
public class LoginDataManager {
private static final String TAG = "LoginDataManager";
private static final String PREFS_NAME = "login_data_prefs";
private static final String KEY_LOGIN_DATA = "login_data";
private static final String KEY_AUTH_TOKEN = "auth_token";
private static final String KEY_DEVICE_ID = "device_id";
private static final String KEY_USER_ID = "user_id";
private static final String KEY_SESSION_ID = "session_id";
private static final String KEY_IS_LOGGED_IN = "is_logged_in";
private static volatile LoginDataManager instance;
private SharedPreferences preferences;
private Gson gson;
// 内存缓存
private PadApiService.PadLoginResponse currentLoginData;
private boolean isLoggedIn = false;
private LoginDataManager(Context context) {
preferences = context.getApplicationContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
gson = new Gson();
loadLoginDataFromPrefs();
}
/**
* 获取LoginDataManager单例实例
* @param context 上下文
* @return LoginDataManager实例
*/
public static LoginDataManager getInstance(Context context) {
if (instance == null) {
synchronized (LoginDataManager.class) {
if (instance == null) {
instance = new LoginDataManager(context);
}
}
}
return instance;
}
/**
* 保存登录数据
* @param loginData 登录响应数据
*/
public void saveLoginData(PadApiService.PadLoginResponse loginData) {
if (loginData == null) {
Log.w(TAG, "登录数据为空,无法保存");
return;
}
// 保存到内存缓存
this.currentLoginData = loginData;
this.isLoggedIn = true;
// 保存到持久化存储
SharedPreferences.Editor editor = preferences.edit();
editor.putString(KEY_LOGIN_DATA, gson.toJson(loginData));
editor.putString(KEY_AUTH_TOKEN, loginData.getToken());
editor.putString(KEY_USER_ID, String.valueOf(loginData.getStadiumId())); // 使用stadium_id作为用户标识
editor.putString(KEY_SESSION_ID, loginData.getToken()); // 使用token作为session_id
editor.putBoolean(KEY_IS_LOGGED_IN, true);
editor.apply();
Log.d(TAG, "登录数据保存成功");
logLoginInfo();
}
/**
* 获取当前登录数据
* @return 登录数据如果未登录返回null
*/
public PadApiService.PadLoginResponse getLoginData() {
return currentLoginData;
}
/**
* 获取认证Token
* @return Token字符串
*/
public String getAuthToken() {
if (currentLoginData != null) {
return currentLoginData.getToken();
}
return preferences.getString(KEY_AUTH_TOKEN, "");
}
/**
* 获取用户ID
* @return 用户ID
*/
public String getUserId() {
if (currentLoginData != null) {
return String.valueOf(currentLoginData.getStadiumId());
}
return preferences.getString(KEY_USER_ID, "");
}
/**
* 获取会话ID
* @return 会话ID
*/
public String getSessionId() {
if (currentLoginData != null) {
return currentLoginData.getToken();
}
return preferences.getString(KEY_SESSION_ID, "");
}
/**
* 获取场馆ID
* @return 场馆ID
*/
public int getStadiumId() {
if (currentLoginData != null) {
return currentLoginData.getStadiumId();
}
return 0;
}
/**
* 获取品牌ID
* @return 品牌ID
*/
public int getBrandId() {
if (currentLoginData != null) {
return currentLoginData.getBrandId();
}
return 0;
}
/**
* 获取店铺名称
* @return 店铺名称
*/
public String getStoreName() {
if (currentLoginData != null) {
return currentLoginData.getName();
}
return "";
}
/**
* 获取店铺Logo URL
* @return Logo URL
*/
public String getStoreLogo() {
if (currentLoginData != null) {
return currentLoginData.getLogo();
}
return "";
}
/**
* 检查是否已登录
* @return true如果已登录false否则
*/
public boolean isLoggedIn() {
return isLoggedIn && currentLoginData != null;
}
/**
* 设置设备ID
* @param deviceId 设备ID
*/
public void setDeviceId(String deviceId) {
preferences.edit().putString(KEY_DEVICE_ID, deviceId).apply();
}
/**
* 获取设备ID
* @return 设备ID
*/
public String getDeviceId() {
return preferences.getString(KEY_DEVICE_ID, "");
}
/**
* 清除登录数据登出
*/
public void clearLoginData() {
// 清除内存缓存
this.currentLoginData = null;
this.isLoggedIn = false;
// 清除持久化存储
SharedPreferences.Editor editor = preferences.edit();
editor.remove(KEY_LOGIN_DATA);
editor.remove(KEY_AUTH_TOKEN);
editor.remove(KEY_USER_ID);
editor.remove(KEY_SESSION_ID);
editor.putBoolean(KEY_IS_LOGGED_IN, false);
editor.apply();
Log.d(TAG, "登录数据已清除");
}
/**
* 从SharedPreferences加载登录数据
*/
private void loadLoginDataFromPrefs() {
try {
String loginDataJson = preferences.getString(KEY_LOGIN_DATA, "");
boolean savedIsLoggedIn = preferences.getBoolean(KEY_IS_LOGGED_IN, false);
if (!loginDataJson.isEmpty() && savedIsLoggedIn) {
currentLoginData = gson.fromJson(loginDataJson, PadApiService.PadLoginResponse.class);
isLoggedIn = true;
Log.d(TAG, "从本地存储恢复登录数据成功");
} else {
Log.d(TAG, "本地无有效登录数据");
}
} catch (Exception e) {
Log.e(TAG, "加载登录数据失败: " + e.getMessage());
// 清除可能损坏的数据
clearLoginData();
}
}
/**
* 打印登录信息到日志
*/
private void logLoginInfo() {
if (currentLoginData != null) {
Log.i(TAG, "=== 当前登录信息 ===");
Log.i(TAG, "店铺名称: " + currentLoginData.getName());
Log.i(TAG, "场馆ID: " + currentLoginData.getStadiumId());
Log.i(TAG, "品牌ID: " + currentLoginData.getBrandId());
Log.i(TAG, "Token: " + (currentLoginData.getToken() != null ? "已设置" : "未设置"));
Log.i(TAG, "Logo: " + (currentLoginData.getLogo() != null ? "已设置" : "未设置"));
Log.i(TAG, "==================");
}
}
/**
* 更新登录数据部分更新
* @param loginData 新的登录数据
*/
public void updateLoginData(PadApiService.PadLoginResponse loginData) {
if (loginData != null) {
saveLoginData(loginData);
}
}
/**
* 检查Token是否有效
* @return true如果Token存在且不为空
*/
public boolean isTokenValid() {
String token = getAuthToken();
return token != null && !token.trim().isEmpty();
}
/**
* 获取用户信息对象兼容旧代码
* @return UserInfo对象
*/
public PadApiService.UserInfo getUserInfo() {
if (currentLoginData != null) {
return currentLoginData.getUserInfo();
}
return null;
}
}

95
app/src/main/java/com/ouxuan/oxface/device/DeviceUtils.java

@ -0,0 +1,95 @@
package com.ouxuan.oxface.device;
import android.content.Context;
import android.provider.Settings;
import android.util.Log;
/**
* 设备工具类
* 用于获取设备相关信息包括设备ID设备类型等
*/
public class DeviceUtils {
private static final String TAG = "DeviceUtils";
/**
* 获取设备 ID
* mqtt 注册提供设备参数
* @param context 上下文
* @return 设备ID字符串
*/
public static String getAndroidID(Context context) {
String android_id = "";
try {
android_id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
Log.d(TAG, "Android ID: " + android_id);
} catch (Exception e) {
Log.e(TAG, "获取Android ID失败: " + e.getMessage());
android_id = "unknown";
}
return android_id;
}
/**
* 获取格式化的设备ID
* 添加"ANDROID_"前缀与网络请求中使用的格式保持一致
* @param context 上下文
* @return 格式化的设备ID
*/
public static String getFormattedDeviceId(Context context) {
String androidId = getAndroidID(context);
return androidId;
}
/**
* 获取设备型号
* @return 设备型号
*/
public static String getDeviceModel() {
return android.os.Build.MODEL;
}
/**
* 获取设备品牌
* @return 设备品牌
*/
public static String getDeviceBrand() {
return android.os.Build.BRAND;
}
/**
* 获取Android版本
* @return Android版本
*/
public static String getAndroidVersion() {
return android.os.Build.VERSION.RELEASE;
}
/**
* 获取设备信息摘要
* @param context 上下文
* @return 设备信息字符串
*/
public static String getDeviceInfo(Context context) {
StringBuilder deviceInfo = new StringBuilder();
deviceInfo.append("Device ID: ").append(getAndroidID(context)).append("\n");
deviceInfo.append("Brand: ").append(getDeviceBrand()).append("\n");
deviceInfo.append("Model: ").append(getDeviceModel()).append("\n");
deviceInfo.append("Android Version: ").append(getAndroidVersion());
return deviceInfo.toString();
}
/**
* 打印设备信息到日志
* @param context 上下文
*/
public static void logDeviceInfo(Context context) {
Log.i(TAG, "=== 设备信息 ===");
Log.i(TAG, "Device ID: " + getAndroidID(context));
Log.i(TAG, "Formatted Device ID: " + getFormattedDeviceId(context));
Log.i(TAG, "Brand: " + getDeviceBrand());
Log.i(TAG, "Model: " + getDeviceModel());
Log.i(TAG, "Android Version: " + getAndroidVersion());
Log.i(TAG, "==================");
}
}
Loading…
Cancel
Save