2

私のアプリは、デバイスの電話番号を使用して、ユーザーの連絡先に関する意味のある情報を取得します。Android と iOS で動作します。

電話では、ユーザーの一意の識別子として 10 桁の (国コードなしの) 電話番号を使用するだけです。これは Android シミュレーター (独自の無効な番号を持つ) でも機能しますが、iPhone シミュレーターは空白の番号を返します (このケースは簡単に無視できます)。

次に、非電話デバイスでのテストに取り掛かりました。連絡先は引き続き利用できますが、電話番号はありません。簡単な方法は、iOS で UDID を使用し、Android で同等のものを使用することです。ただし、解決する必要がある2つの問題があります。

  1. UDID は均一ではありません。10 文字のキーが必要です。衝突を避けて n 文字を 10 文字にハッシュする方法はありますか? (私は非常に低い確率の衝突で生きることができます)

  2. さらに大きな問題: Apple が iOS 5 の時点で UDID アクセスをブロックしていることを読みました。10 文字のキーを維持する必要がある場合、代わりに何を使用すればよいでしょうか?

御時間ありがとうございます。

4

3 に答える 3

2

任意のハッシュ方法を使用できます。結果が 10 文字のみであるという要件がある場合、より大きなハッシュを簡単に 10 文字に減らすことができます。結果を 10 文字でクリップすることができます。ハッシュが 20 文字を超えている) など。

Android でのより大きな課題は、一意のデバイス ID を見つけることです。Google が導入したメカニズムがありますが、それは OEM コンプライアンスに依存しており、コンプライアンスはすべてのデバイスで均一ではありません。一意の Android デバイス ID はありますか? ただし、いくつかの良い情報が含まれています。

于 2011-08-29T21:19:40.883 に答える
2

MAC アドレスを使用できます。iPhone の MAC アドレスをプログラムで取得するにはどうすればよいですか。github https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5上のアプリの MAC アドレスとバンドル識別子から UUID を作成するソリューションがあります。

iPhoneのMACアドレスで十分だと思います。Mac アドレスは 12 文字なので、10 文字に圧縮する方法を決める必要があります。

于 2011-08-29T21:57:52.997 に答える
0

これをチェックしてみてください。これは、Localytics オープン ソース SDK からのものです。

/**
 * Gets a 1-way hashed value of the device's unique ID. This value is
 * encoded using a SHA-256 one way hash and cannot be used to determine what
 * device this data came from.
 * 
 * @param appContext
 *            The context used to access the settings resolver
 * @return An 1-way hashed identifier unique to this device or null if an
 *         ID, or the hashing algorithm is not available.
 */
public static String getGlobalDeviceId(final Context appContext) {
    String systemId = System.getString(appContext.getContentResolver(),
            System.ANDROID_ID);
    if (systemId == null) {
        return null;
    }

    try {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] digest = md.digest(systemId.getBytes());
        BigInteger hashedNumber = new BigInteger(1, digest);
        return new String(hashedNumber.toString(16));

    } catch (NoSuchAlgorithmException e) {
        return null;
    }
}
于 2011-08-29T21:54:59.260 に答える