31

画像をサーバーに送信する iPhone アプリの場合、特定の電話からのすべての画像を何らかの方法で結び付ける必要があります。送信するたびに、一意の電話 ID を送信したいと思います。をみました

  [[UIDevice mainDevice] uniqueIdentifier]
と [[NSUserDefaults standardDefaults] stringForKey:@"SBFormattedPhoneNumber"]

しかし、シミュレーターでエラーが発生します。

これを行うためにAppleが認可した方法はありますか?

4

13 に答える 13

41

どのようなエラーが発生していますか? [[UIDevice currentDevice] uniqueIdentifier](編集して API を修正しました。Martin に感謝します! ) は、これを行うための公式に推奨される方法です。

于 2008-10-22T21:44:49.437 に答える
18

CFUUID を使用して UUID を生成することもできます。ここにいくつかのコードがあります:

NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
  uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
  [uuid autorelease];
  CFRelease(theUUID);
}
于 2008-10-23T01:41:49.707 に答える
13

一意の識別子を取得する最も簡単で適切な方法は、Apple が明示的に提供するメカニズムを使用すること[[UIDevice currentDevice] uniqueIdentifier]です。電話番号がデバイスに固有であること、またはデバイスが電話番号を持っていることを保証することはできません。それを超えて、そうすることはユーザーのプライバシーの明確な侵害であるため、恐ろしい考えです.uniqueidentifier

于 2008-11-04T03:21:24.933 に答える
8

インストール間で作成した一意の識別子を保持するには、キーチェーンを使用できますSSKeychain で簡単に作成できます: 次のように UUID を設定するだけです。

        [SSKeychain setPassword:@"Your UUID" forService:@"com.yourapp.yourcompany" account:@"user"];

必要なときにいつでも呼び出します。

NSString *retrieveuuid = [SSKeychain passwordForService:@"com.yourapp.yourcompany" account:@"user"];

注: サービスとアカウントは正確に一致する必要があります

その後、アプリを削除して再インストールすると、再インストールしても UUID が保持されます。

その後、この UUID をデバイス間で共有したい場合は、iCloud を使用するようにアプリを設定してください。その後、UUID を NSUserDefaults に保存し、KeyValueStore と同期してから、上記のコードを使用して新しいデバイス キーチェーンに UUID を設定できます。

上記のすべてのコードを入力すると、この回答は非常に長くなりますが、ここにはすべてを理解するためのサンプルコードがたくさんあります。

于 2011-12-30T07:04:08.510 に答える
7

iOS 5 では uniqueIdentifier が非推奨になることを忘れないでください。その代わりに CFUUID を使用する必要があります。

于 2011-08-22T05:55:49.583 に答える
5

興味深いことに、Apple はその後 iOS 5 で uniqueIdentifier を非推奨にしました (gN0Me が述べたように)。関連する TechCrunch の記事は次のとおりです: http://techcrunch.com/2011/08/19/apple-ios-5-phasing-out-udid/

Apple は、デバイスを一意に識別するのではなく、ユーザーを識別することをお勧めします。ほとんどの場合、これは優れたアドバイスですが、グローバルに一意のデバイス ID が必要な場合もあります。これらのシナリオは、広告では非常に一般的です。したがって、既存の動作を正確に複製する非常に単純なドロップイン ライブラリを作成しました。

自己宣伝の恥知らずなプラグインで、誰かがそれを役に立つと思ってここにリンクします. また、あらゆるフィードバックや批判を歓迎します: http://www.binpress.com/app/myid/591

それにもかかわらず、あなたの特定の状況では、私のライブラリが提供するグローバルに一意の ID 機能をスキップすることをお勧めします。代わりに、単純な CFUUID を生成して NSUserDefaults に保存します。この ID はアプリケーションに固有ですが、データベース内のその「アプリ インストール」のすべての写真をグループ化できます。

つまり、uniqueIdentifier メソッドを非推奨にすることで、Apple は、デバイスごとではなく、アプリのインストールごとに識別することを提案しています。特定の条件下で運用している場合を除き、アプリID ごとのほうが製品に適している可能性があります。

于 2011-10-11T03:13:41.577 に答える
2

これは私も解決しようとしている興味深い問題です。これが私が取り上げたいシナリオです。

スマートフォンを他の人に販売するとどうなりますか...そのデバイスIDは他の人のものになるため、アプリがiPhoneから削除された場合でも、アプリが再度追加され、すべてのデータが再関連付けされます。新しいユーザーに...これは悪いことです。

デバイスIDMD5の電話番号を使用することは優れたソリューションです。私たちが思いついたもう1つの方法は、デバイスIDでハッシュされたトークンを含むSQLLiteDBを使用することです。次に、アプリが削除されると、DBが強制終了され、すべてのデータの関連付けが解除されます。もろすぎるのではないかと思います。

他のアイデアはありますか?

Rob Ellis(PhoneGap / Nitobi)

于 2009-01-26T21:05:48.567 に答える
1

最適なソリューションである Apple の GenericKeyChain を使用します。これが実際のサンプルです >> https://developer.apple.com/library/prerelease/ios/samplecode/GenericKeychain/Introduction/Intro.html

KeyChainAccess について考えている >> https://developer.apple.com/library/mac/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html#//apple_ref/doc/uid/TP30000897-CH204-TP9

于 2015-07-07T04:16:35.167 に答える
0

スニピット:

NSString *phoneNumber = (NSString *) [[NSUserDefaults standardUserDefaults] objectForKey:@"SBFormattedPhoneNumber"]; // Will return null in simulator!
NSLog(@"Formatted phone number [%@]", phoneNumber);

[最近] このコードを OS 2.2.1 [および OS 3.0] でそのまま実行しました。

デバイスで実行すると期待どおりに動作し、完全な国際ダイヤル コード [私の場合は 1] を含む電話番号を返します。

シミュレーターで実行すると、[返される] 値は null 文字列になるため、実際の iPhone デバイスでのみ機能します。

iPod Touch ではテストしていません。

...

今週、別のデバイスでこのコードを実行したところ、数値ではなく null 値が返されました。

さらに調査したところ、このコード スニピットによって返された番号は、iTunes でデバイス用に設定された番号であることがわかりました。

デバイスのアクティベーション時に iTunes に iPhone の番号を入力しなかった場合、またはおそらく (私の場合のように) デフォルト値が iPhone の番号ではなく、とにかく [OK] をクリックした場合、iTunes は電話番号をリストしないようにします。 iPhone が接続されている場合、このコードは null 文字列を返します。

[上記は、このトピックに関する別の記事http://www.alexcurylo.com/blog/2008/11/15/snippet-phone-number/に最近投稿したコメントを編集したものです]

于 2009-06-26T14:33:20.493 に答える
0

MAC アドレスを一意の ID として使用できます。次のリンクが役立ちます

プログラムでiPhoneのMACアドレスを取得するにはどうすればよいですか

于 2012-09-03T07:49:11.287 に答える
0

ここでは、テスト目的に役立つ可能性がある iTunes から取得する方法についての詳細情報を示します。

于 2009-07-01T15:21:26.217 に答える
0

iphone の作業は行っていませんが、電話に固有の何かのハッシュを取得するのはどうですか... ああ、電話番号を教えてください。

iphone番号の取得

于 2008-10-22T21:25:12.063 に答える
0

私はそのようなコードで成功しました:

- (NSString *)stringUniqueID {
    NSString *  result;
    CFUUIDRef   uuid;
    CFStringRef uuidStr;
    uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);
    uuidStr = CFUUIDCreateString(NULL, uuid);
    assert(uuidStr != NULL);
    result = [NSString stringWithFormat:@"%@", uuidStr];
    assert(result != nil);
    NSLog(@"UNIQUE ID %@", result);
    CFRelease(uuidStr);
    CFRelease(uuid);
    return result;
}    
于 2009-07-24T14:54:48.743 に答える