AndroidおよびXamarin Fromsでc#を使用するiOS?でデバイス固有IDを取得するにはどうすればよいですか?通知の送信にAzure Notification Hubを使用しています。これを参照しています blog 。ただし、Androidでは、関連する「設定」が見つかりません
投稿されたブログ投稿 http://codeworks.it/blog/?p=26 とあなたの短い問題の説明によると、私はあなたの質問に答えようとします。
Android use Android.Provider.Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Android.Provider.Settings.Secure.AndroidId);
IOSの場合は、ブログ投稿を参照するか、必要に応じてIdentifierForVendor
を保存します。 AppDelegate
で、IOSDevice
クラスでこの値を返します(ブログ投稿の名前を使用)。 UIDevice.CurrentDevice.IdentifierForVendor.ToString()
を使用して、iOSでデバイスIDを取得します。
詳細は こちら で説明されています。しかし実際には、このようにして各デバイスからIDを取得しようとする必要はありません。 Guidを作成してデバイスに保存するだけでも機能します。 Xamarinには 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を取得するその他の場合、アプリを別のデバイスに転送すると変更されます。
デバイスからIDを取得するその他の場合:
iOS:IdentifierForDevice
public string Id => UIDevice.CurrentDevice.IdentifierForVendor.AsString();
Android:シリアル、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;
}
}