47

ハードウェアの変更やアプリの再インストールなどで変更されない、Windows Phone 8(WP8)で読み取ることができる一意のデバイスID(UDID)または同様のIDはありますか?

古いバージョンのWindowsPhoneには、次のようなIDがありました。WP7:WindowsPhoneのデバイスステータス

WP7.1:DeviceStatusクラス

ただし、SDK8.0では機能しなくなりました。

質問する理由: ユーザーはアプリの最初の起動時に無料クレジットを取得するという考えであり、ユーザーが新しい無料クレジットを取得するためにアプリを再インストールするだけでは避けたいと考えています。電子メールまたは電話番号で登録することでこれを解決できますが、可能であれば、最初に登録を開始するときにユーザーに迷惑をかけたくありません。

- -/// - -解決 - - - - -

DeviceExtendedProperties.GetValue( "DeviceUniqueId")がWP8.0でも機能することを確認できます。次のテキストを読んだときに少し混乱しました。

Windows Phone OS 7.0では、このクラスはデバイス固有のプロパティを照会するために使用されていました。Windows Phone OS 7.1では、DeviceExtendedPropertiesのほとんどのプロパティが非推奨になり、代わりに新しいDeviceStatusクラスを使用する必要があります。ただし、必要に応じて、非推奨ではない以下のプロパティのいずれかを引き続き使用できます。

MSDN:DeviceExtendedPropertiesクラス

次のコードを実行し、アプリを削除して再インストールし、同じIDを取得できます。

byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
MessageBox.Show(DeviceIDAsString);
4

9 に答える 9

31

まだ7でWindowsPhone8の開発を開始していませんが、元のDeviceExtendedPropertiesクラスを使用してデバイスの一意のIDをプルバックできるはずです。

DeviceExtendedProperties.GetValue("DeviceUniqueId")
于 2012-12-20T18:20:49.497 に答える
20

null値を返す際にこの問題が発生しました。次に、スイッチをオンにする必要があることを思い出しました。

WMAppManifest.xml->Capabilitiesタブ->スイッチをオンにしますID_CAP_IDENTITY_DEVICE

于 2013-01-20T19:44:31.937 に答える
8

このDeviceUniqueIdにはひねりがあり、1つのパブリッシャーにのみ固有です。したがって、これは実際にはデバイス全体の一意の識別子ではなく、1つのサイト運営者の一意のデバイスIDです。異なるアカウントから同じ電話を識別しようとした顧客プロジェクトに取り組んだときに気づきました(顧客は2つの異なるアカウントで公開しています)。

于 2013-03-12T09:01:07.557 に答える
4

DeviceExtendedProperties.GetValue( "DeviceUniqueId")によって独自のwp8デバイスIDを取得できます。これは、deviceIdを文字列として取得する簡単な方法です。

byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
 string   deviceID = Convert.ToBase64String(id);
于 2013-12-11T06:54:49.047 に答える
2

Windows Phone8およびWindows8でDeviceUniqueIdを提供しないことにより、Microsoftはユーザー追跡を回避しようとしましたが、開発者コミュニティからの圧力が高まったため、再びそれを復活させています。

Windows 8.1では、Microsoftは新しいAdvertisingId APIを導入し、同様のIDを使用して、後続のWindows Phone 8.1/9バージョンのアプリ全体で一意のユーザーを識別することもできます。

于 2013-10-28T17:59:09.840 に答える
2

私はこれを使用しました:

    private static String getDeviceId()
        {
            byte[] id = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
            return BitConverter.ToString(id).Replace("-", string.Empty);
        }

ただし、重要なのは、WMAppManifestでID_CAP_IDENTITY_DEVICEを確認することです。そうしないと、エラーがスローされます。

于 2014-01-28T08:19:03.207 に答える
1

これは新しいHostInformation.PublisherHostIdプロパティであることがわかりました。詳細については、http://msdn.microsoft.com/en-us/library/windowsphone/develop/windows.phone.system.analytics.hostinformation.publisherhostid.aspxを 参照してください。

于 2014-08-03T01:00:29.403 に答える
1
string myDeviceID = (byte[])DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);

私はこれをWindowsPhoneの一意のデバイスIDに使用しました。

于 2015-02-24T07:18:51.837 に答える
0

上記の回答は、WindowsPhone7および8Silverlightで機能します。ただし、SDKにはこのdllライブラリ(Microsoft.Phone)がないため、Windows Phone RT(ユニバーサル)またはストアアプリでは機能しません。

これは、Windows Phone 8.1 RT(ユニバーサル/ストアアプリ)でデバイスIDと名前(および場合によってはその他の情報)を取得する方法です。

private string GetHardwareId()
{
    var token = HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);

    byte[] bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);

    return BitConverter.ToString(bytes);
}

Windows RTでデバイス情報を読み取る方法の詳細については、こちらをご覧ください。

于 2015-07-02T05:48:44.150 に答える