如何使用GUID注册Xamarin Forms应用实例实现设备专属登录功能
Xamarin.Forms 设备账号绑定实现方案
核心逻辑是生成应用维度的唯一标识,首次安装生成后持久化存储,登录时携带标识与账号绑定校验即可满足需求:
实现步骤
- 共享层定义依赖服务接口
public interface IDeviceUniqueIdProvider { // 获取当前应用对应的唯一标识 string GetUniqueId(); }
- 各平台实现接口
Android 平台实现
using Android.App; using Android.Content; using Xamarin.Forms; [assembly: Dependency(typeof(YourApp.Droid.Services.DeviceUniqueIdProvider))] namespace YourApp.Droid.Services { public class DeviceUniqueIdProvider : IDeviceUniqueIdProvider { private const string StorageKey = "APP_BIND_DEVICE_ID"; public string GetUniqueId() { var sp = Application.Context.GetSharedPreferences("AppLocalConfig", FileCreationMode.Private); var existId = sp.GetString(StorageKey, null); if (!string.IsNullOrEmpty(existId)) { return existId; } // 首次生成GUID var newId = System.Guid.NewGuid().ToString("N"); sp.Edit().PutString(StorageKey, newId).Apply(); return newId; } } }
iOS 平台实现
using Foundation; using Xamarin.Forms; [assembly: Dependency(typeof(YourApp.iOS.Services.DeviceUniqueIdProvider))] namespace YourApp.iOS.Services { public class DeviceUniqueIdProvider : IDeviceUniqueIdProvider { private const string StorageKey = "APP_BIND_DEVICE_ID"; public string GetUniqueId() { var existId = NSUserDefaults.StandardUserDefaults.StringForKey(StorageKey); if (!string.IsNullOrEmpty(existId)) { return existId; } var newId = System.Guid.NewGuid().ToString("N"); NSUserDefaults.StandardUserDefaults.SetString(newId, StorageKey); NSUserDefaults.StandardUserDefaults.Synchronize(); return newId; } } }
业务逻辑对接
- 共享层调用依赖服务获取标识:
var deviceId = DependencyService.Get<IDeviceUniqueIdProvider>().GetUniqueId(); - 用户首次登录时,将
deviceId随账号信息一起上传至服务端存储关联 - 后续所有登录请求都携带
deviceId参数,服务端校验请求携带的标识与账号绑定的标识是否一致,不一致直接返回登录失败即可
注意事项
- 上述默认实现中,应用卸载后存储的GUID会被清空,即卸载重装会被识别为新设备。如果需要卸载后仍然识别为同一设备,Android可将GUID存储到系统备份服务或公共存储区域,iOS可存储到Keychain,注意iOS Keychain存储需要配置对应的权限配置项
- 尝试获取系统级设备标识(如IMEI、UDID等)会违反应用商店审核规则,自行生成GUID存储的方案符合各大平台合规要求
内容的提问来源于stack exchange,提问作者Videl
相关产品推荐
相关产品推荐

