2017-03-02 8 views
2

私はapi 14(android 4.0)を使用してアプリケーションを開発しています。デバイスを再起動した後でも同じことができ、私はから各デバイスをユニークIDを取得(または1つを作成)したいアンドロイド:デバイスごとに一意のIDを取得または作成する

<uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="14" /> 

:マニフェストで

。しかし、2つの同じデバイスでもidが異なることが重要です。どうやってやるの?

+0

まだ何か試しましたか? –

+0

私はグーグルだが、電話、タブレット、その他のデバイスのようなすべてのデバイスで機能するものは何も見つかりませんでした。 –

+1

[固有のAndroidデバイスIDはありますか?](http:// stackoverflow。com/questions/2785485/is-there-a-unique-android-device-id) –

答えて

1

あなたはGCM .... を使用して、異なるデバイストークンを生成することができ、このデバイストークンをアンインストールし、アプリケーションを再インストールしたり工場出荷時設定の後に..あなたは、いくつかの手順を実行する必要があります場合でも同じままになります.... .. Google Developers Consoleで新しいプロジェクトを作成します。 このステップでは、簡単にするために、2つの値をメモする必要があります。プロジェクト番号。クライアントプロジェクトでSENDER_IDとして使用されます。 (Credentialsで作成された)APIサーバーキーがあり、サーバープロジェクトでAPI_KEYとして使用されます。 サーバーサイド用の新しい簡単なAndroidプロジェクトを作成します(次のリンクの基本的なソースコードを使用します)。

クライアント側の新しい簡単なAndroidプロジェクトを作成します(次のリンクの基本的なソースコードをGoogle Cloud Messaging-GitHubの元のソースからカスタマイズしました)。

クライアントアプリケーションを実行すると、登録トークンが表示されます(デバイスが正常に登録されたことを意味します)。次に、このトークンをサーバーアプリケーションのCLIENT_REGISTRATION_TOKEN変数に貼り付けるか(またはこのトークンをサーバーアプリケーションに送信するコードを記述します)。

のAndroid Studioを使用してAndroidのためのGCMのHello Worldを実装する方法 追加GoogleクラウドMessagin(GCM)のためのAndroid: あなたはそれらの一つは、あなたの前の質問のいずれかで前に読んだことが、以下の質問で詳細を読むことができます - 登録プロセス

2

デバイスのIMEI番号は一意のIDとして使用できます。

android.telephony.TelephonyManager.getDeviceId()に電話します。

これは、デバイスを一意に識別する任意の文字列(GSMのIMEI、CDMAのMEID)を返します。

あなたのAndroidManifest.xmlに以下の権限が必要です:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
0

をここでは、この1 String android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID);

を試してみてくださいandroid_id各デバイスに固有のIDです。

1

も、このクラスを追加し、このコード

String UniqueDeviceId = AndroidDeviceIdentifier.getUniqueDeviceIdentifier(context); 

を試してみてください。

final class AndroidDeviceIdentifier { 

private AndroidDeviceIdentifier() { 
    // hidden constructor of singleton 
} 

/** 
* Returns a stable identifier for the current device. 
* 
* @param ctx The application's Context 
* @return The unique device identifier 
* @throws IllegalStateException If the device's identifier could not be determined 
*/ 
public static String getUniqueDeviceIdentifier(@NonNull final Context ctx) throws IllegalStateException { 
    try { 
     return getDeviceUUID(ctx); 
    } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) { 
     throw new IllegalStateException("Could not determine device identifier", e); 
    } 
} 

private static String getDeviceUUID(Context ctx) throws UnsupportedEncodingException, NoSuchAlgorithmException { 
    byte[] hash = makeHash(getMac(ctx), getSerialNumber(ctx)); 
    return createUUIDFromHash(hash); 
} 

private static String createUUIDFromHash(byte[] hash) { 
    return UUID.nameUUIDFromBytes(hash).toString().toLowerCase(); // Server side wants lower cased UUIDs 
} 

private static byte[] makeHash(final String mac, final String serialNumber) throws UnsupportedEncodingException, NoSuchAlgorithmException { 
    MessageDigest sha; 

    sha = MessageDigest.getInstance("SHA-256"); 
    sha.reset(); 

    sha.update(mac.getBytes("UTF-8")); 
    sha.update(serialNumber.getBytes("UTF-8")); 

    return sha.digest(); 
} 

private static String getSerialNumber(Context context) { 
    String serialNumber = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); 
    if (serialNumber == null) { 
     serialNumber = "0000000000000000"; 
    } 

    return serialNumber; 
} 

private static String getMac(Context context) { 
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    String mac = wifiManager.getConnectionInfo().getMacAddress(); 
    if (mac == null) { 
     mac = "000000000000"; 
    } 
    return mac; 
} 

固有のデバイスIDが表示されます。あなたに質問がある場合は私にpingしてください

+0

私の答えがあなたの必要を満たす場合は、正解とマークしてください –

関連する問題