3

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

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

以下を使用して、コードで UDID を取得します。

[[UIDevice currentDevice] uniqueIdentifier]

シミュレーターでは、次の値が返されます。

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

このことから、パターン 8-4-4-4-12 に一致する 16 進文字の文字列を検索するだけでよいと推測できます。しかし、これがすべての UDID で機能することを確認したいと思います。

Apple のドキュメントでこれについて何も見つけることができず、誰かがこの質問に対する決定的な答えをくれるかどうか疑問に思っていました... ありがとう!

4

3 に答える 3

2

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
于 2010-12-28T16:19:45.017 に答える
2

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

UDID の形式とアルゴリズムは公開されておらず、再度検出されるようには設計されていません。そのため、判断は可能かもしれませんが、100% になることはありません。

于 2010-12-28T16:27:24.667 に答える
2

わかりません。Apple のドキュメントには次のように書かれています。

デバイスの一意の識別子 (Unique Device Identifier の UDID と省略されることもあります) は、デバイスのシリアル番号などのさまざまなハードウェア識別子から構成されるハッシュ値です。

uniqueIdentifieriPhone シミュレーターは、実際の iOS デバイスとは異なる値を返します。私が使用した実際の iPhone デバイスはすべて、16 進数で 40 文字の UDID を持っています。しかし、仮定をしないことが最善です。

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

于 2010-12-28T16:23:29.993 に答える