2010-12-28 13 views
3

フォールバックのあるiOS Cocoaアプリで作業しています。ユーザーが特定のデータを入力しないと、代わりにデフォルトのデバイスのUDIDが使用されます。送信される値がUDID(ユーザのデフォルト)か、設定したカスタム文字列かを認識するために、サーバコード(Rubyで書かれています)にチェックを追加する必要があります。文字列がiOSデバイスのUDIDであるかどうかをどのように認識できますか?

私の問題の正しい解決策は正規表現です。私は正規表現を書いても大丈夫ですが、この正規表現がUDIDを認識することが100%保証されていることを確認する必要があります。

私が使用してコードにUDIDを取得:

[[UIDevice currentDevice] uniqueIdentifier] 

、シミュレータで、私は戻って、この値を取得:このことから

6938CA7D-ECE2-53A4-B293-961A8D07AFB1 

を私は単なる文字列を検索することができることを推測するかもしれませんパターン8-4-4-4-12に一致する16進数の文字列。しかし、私はすべてのUDIDでこれが機能していることを確認したい。

アップルのドキュメントでこれについて何も見つかりませんでした。誰かが私にこの質問に対する決定的な答えを与えることができるかどうか疑問に思っていました...ありがとう!

+0

マイナーコメント:複数のユーザーが同じ文字列を入力するとどうなりますか? – Joost

+0

iPhone、Cocoa、IOSとは関係がありません。そのRubyに関する質問は正しいですか? – VdesmedT

+1

実際の問題はソフトウェアの動作設計です。 UDIDは人だけでなく、**デバイス**を識別します。人はUDIDで確実に識別できません。ユーザーがUDIDを変更できないため、UDIDを使用すると多くの問題が発生する可能性があります。 – Eonil

答えて

1

UDIDであることを示す別のビットのデータを送信しないのはなぜですか?または、別のパラメータ名(UDID=6938...)を使用してください。

# somewhere outside the controller action, maybe the top of the file 
UDID_PATTERN = /\A[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\Z/ 

# inside the controller action you're sending info to 
udid = params[:UDID] 
if udid && (udid =~ UDID_PATTERN) 
    # do something with the UDID in place of the other 
    # bit of info they could have provided 
end 
+0

答えとしてマークする。別のポスターが指摘するように、デバイスがシミュレータとは異なるUDIDを生成しているように見えます。これは、これらのUDIDがあまり予測不可能であることを証明するように思われる別の特徴です。しかし、提供された正規表現は、Rubyコードに投稿したパターンに一致する文字列を認識するための有効なものです。 – IQpierce

+0

与えられたパターンは非常に多くの有効なUDIDで失敗します。現在、ハイフンのないUDIDもあります。 –

+0

なぜそれが下落されているのか分かりますか? –

2

あなたが言うことができない:あなたが本当にしたい場合は

その後、サーバーに、あなたはそうのようにそれをテストすることができます。 Appleのdocumentationは言う:

(時々一意のデバイス識別子のUDIDと略す)デバイスの固有の識別子は、デバイスシリアル番号のような様々なハードウェア識別子から構成されるハッシュ値です。

iPhoneシミュレータは、実際のiOSデバイスと比較してuniqueIdentifierの値が異なります。私が使った実際のiPhoneのデバイスはすべて、40桁の16進数のUDIDを持っています。しかし、何も仮定しないことが最善です。

UDIDパターンがあっても、そのパターンに一致するものをユーザーが入力した場合はどうなりますか?

2

明らかに、唯一保証されている方法は、ユーザーが期待したデータを入力したかどうかを示す追加のフィールドを追加することです。

UDIDフォームとアルゴリズムは公開されておらず、再度検出されるようには設計されていません。したがって、決定は可能かもしれませんが、決して100%ではありません。

関連する問題