如何在 Xamarin Forms 中获取设备 ID?
How to get Device Id in Xamarin Forms?
如何在 Xamarin Froms 中使用 c# 在 Android 和 iOS 中获取设备唯一 ID?我正在使用 Azure 通知中心发送通知。我指的是这个 blog。但是在 Android 我找不到相关的 "Settings"
根据您发布的博文 http://codeworks.it/blog/?p=260 和您的简短问题描述,我尝试回答您的问题。
供android使用
Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
对于 iOS,请参阅您的博文.. 或者选择保存 IdentifierForVendor
,例如在您的 AppDelegate
和 return 中,此值在您的 IOSDevice
class 中(使用博文中的名称)。
使用 UIDevice.CurrentDevice.IdentifierForVendor.ToString()
获取 iOS 上的设备 ID。
详细描述了here. But actually you don't need to do like this and trying to get an Id from each devices. Simply creating a Guid and saving to device is also working. Xamarin has Prefences设备中的持久值。
您可以创建一个 guid 并将其保存到 Prefecences,就像我在下面所做的那样:
var deviceId = Preferences.Get("my_deviceId", string.Empty);
if(string.IsNullOrWhitespace(deviceId))
{
deviceId = System.Guid.NewGuid().ToString();
Preferences.Set("my_deviceId", deviceId);
}
这种方法的好处是,在将您的应用程序转移到另一台设备后,您仍将拥有相同的 ID;但是如果您卸载并重新安装,您将获得一个新的 Id。对于您从设备获取 Id 的其他情况,当您将您的应用程序转移到另一台设备时,它会发生变化。
其他想从设备获取Id的情况:
iOS:设备标识符
public string Id => UIDevice.CurrentDevice.IdentifierForVendor.AsString();
Android: Serial, getSerial & AndroidId
string id = string.Empty;
public string Id
{
get
{
if (!string.IsNullOrWhiteSpace(id))
return id;
id = Android.OS.Build.Serial;
if (string.IsNullOrWhiteSpace(id) || id == Build.Unknown || id == "0")
{
try
{
var context = Android.App.Application.Context;
id = Secure.GetString(context.ContentResolver, Secure.AndroidId);
}
catch (Exception ex)
{
Android.Util.Log.Warn("DeviceInfo", "Unable to get id: " + ex.ToString());
}
}
return id;
}
}
UWP:GetPackageSpecificToken 或 GetSystemIdForPublisher
string id = null;
public string Id
{
get
{
if (id != null)
return id;
try
{
if (ApiInformation.IsTypePresent("Windows.System.Profile.SystemIdentification"))
{
var systemId = SystemIdentification.GetSystemIdForPublisher();
// Make sure this device can generate the IDs
if (systemId.Source != SystemIdentificationSource.None)
{
// The Id property has a buffer with the unique ID
var hardwareId = systemId.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
id = Convert.ToBase64String(bytes);
}
}
if (id == null && ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
id = Convert.ToBase64String(bytes);
}
if (id == null)
{
id = "unsupported";
}
}
catch (Exception)
{
id = "unsupported";
}
return id;
}
}
James Montemagno 展示了一个插件。
在 NuGet 包中搜索 Xam.Plugin.DeviceInf。 Github link: https://github.com/jamesmontemagno/DeviceInfoPlugin
如何在 Xamarin Froms 中使用 c# 在 Android 和 iOS 中获取设备唯一 ID?我正在使用 Azure 通知中心发送通知。我指的是这个 blog。但是在 Android 我找不到相关的 "Settings"
根据您发布的博文 http://codeworks.it/blog/?p=260 和您的简短问题描述,我尝试回答您的问题。
供android使用
Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
对于 iOS,请参阅您的博文.. 或者选择保存 IdentifierForVendor
,例如在您的 AppDelegate
和 return 中,此值在您的 IOSDevice
class 中(使用博文中的名称)。
使用 UIDevice.CurrentDevice.IdentifierForVendor.ToString()
获取 iOS 上的设备 ID。
详细描述了here. But actually you don't need to do like this and trying to get an Id from each devices. Simply creating a Guid and saving to device is also working. Xamarin has Prefences设备中的持久值。
您可以创建一个 guid 并将其保存到 Prefecences,就像我在下面所做的那样:
var deviceId = Preferences.Get("my_deviceId", string.Empty);
if(string.IsNullOrWhitespace(deviceId))
{
deviceId = System.Guid.NewGuid().ToString();
Preferences.Set("my_deviceId", deviceId);
}
这种方法的好处是,在将您的应用程序转移到另一台设备后,您仍将拥有相同的 ID;但是如果您卸载并重新安装,您将获得一个新的 Id。对于您从设备获取 Id 的其他情况,当您将您的应用程序转移到另一台设备时,它会发生变化。
其他想从设备获取Id的情况:
iOS:设备标识符
public string Id => UIDevice.CurrentDevice.IdentifierForVendor.AsString();
Android: Serial, getSerial & AndroidId
string id = string.Empty;
public string Id
{
get
{
if (!string.IsNullOrWhiteSpace(id))
return id;
id = Android.OS.Build.Serial;
if (string.IsNullOrWhiteSpace(id) || id == Build.Unknown || id == "0")
{
try
{
var context = Android.App.Application.Context;
id = Secure.GetString(context.ContentResolver, Secure.AndroidId);
}
catch (Exception ex)
{
Android.Util.Log.Warn("DeviceInfo", "Unable to get id: " + ex.ToString());
}
}
return id;
}
}
UWP:GetPackageSpecificToken 或 GetSystemIdForPublisher
string id = null;
public string Id
{
get
{
if (id != null)
return id;
try
{
if (ApiInformation.IsTypePresent("Windows.System.Profile.SystemIdentification"))
{
var systemId = SystemIdentification.GetSystemIdForPublisher();
// Make sure this device can generate the IDs
if (systemId.Source != SystemIdentificationSource.None)
{
// The Id property has a buffer with the unique ID
var hardwareId = systemId.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
id = Convert.ToBase64String(bytes);
}
}
if (id == null && ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
{
var token = HardwareIdentification.GetPackageSpecificToken(null);
var hardwareId = token.Id;
var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var bytes = new byte[hardwareId.Length];
dataReader.ReadBytes(bytes);
id = Convert.ToBase64String(bytes);
}
if (id == null)
{
id = "unsupported";
}
}
catch (Exception)
{
id = "unsupported";
}
return id;
}
}
James Montemagno 展示了一个插件。
在 NuGet 包中搜索 Xam.Plugin.DeviceInf。 Github link: https://github.com/jamesmontemagno/DeviceInfoPlugin