2011-09-09 11 views
4

私は注文予約アプリケーションを作成しています。 iPhone/iOSデバイスからサーバーに固有のキーを送信する必要があります。iPhoneまたはiOSデバイスの一意のIDを使用

iPhoneのGUIDは使用できますか?すなわち[UIDevice uniqueIdentifier]それは合法ですか?法的手段はリンゴがそれを受け入れるだろうか?

iPhoneまたはiOSデバイスを一意に識別するのに最適なプロパティは何ですか? そうでなければ、デバイスを一意に識別する別の方法があります。

実際には私は予約番号が必要です。アプリによって生成されます。ユニークでなければなりません。

+0

はどこでこのGUIDを取得するのですか?どのようなAPIですか? –

+0

私は、「合法ですか?」とはどういう意味なのかよく分かりません。 – NotMe

+1

私はあなたがその装置ではなく、そのユーザーを特定することをお勧めします。ユーザーはデバイスを変更できます。 ;-) –

答えて

3

UUIDの作成:UUIDを含む文字列。 ASCIIで表されるUUIDの標準形式は、ハイフンで区切られた文字列です(例:68753A44-4D6F-1226-9C60-0050E4C00067)。 iOSの6で

+ (NSString *)newUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return (NSString *)string; 
} 
+2

これは[UIDevice uniqueIdentifier]によって生成される可能性があります。これはユニークですが、リンゴはDevice ID – Mann

4

私が知っているGUIDはありません。[UIDevice uniqueIdentifier]を意味しますか?あなたはそれを使うかもしれませんが、iOS 5では廃止予定ですので、あなたのデバイスを識別する他の手段を考え出すのがよいでしょう。

+0

ええ、何かのためにそのIDを使用することは悪い考えです。率直に言って、私はAppleがそれを含むべきだとは思わない。 – NotMe

+0

他に何ができますか? – Mann

+0

予約が必要です。ユニークである必要があります – Mann

1

著者は "バンドル識別子と組み合わせてデバイスのMACアドレスに基づいて一意な識別子を生成する"ため、NDAの対象は参照しませんが、このsolutionを試してみてください。しかし、jailbrokenデバイスがmacアドレスAFAIKを変更できることを警告してください。

+0

アップルはこのテクニックを使ってアプリを受け入れますか? – devios1

0

がidentifierForVendorを来た、それは同じベンダーから複数のアプリケーションにまたがって使用することができ、それはあなたのデバイス間でユーザーを識別するために、例えばiCloudにのキーと値のストアと組み合わせて使用​​することができますデバイスを識別するが、 。

オレBegemannは、彼のブログ上でうまくそれをすべて説明:http://oleb.net/blog/2012/09/udid-apis-in-ios-6/

5

Appleが2013年5月には、これはの代替であるユーザーの行動を追跡するために

をUDIDを使用するアプリケーションを拒否することを開始することを発表しました。 UDID:あなたはのUIApplication、UIDeviceのカテゴリを作成することができますか、この(ARC例)のようにprefereとして

@interface UIApplication (utilities) 
- (NSString*)getUUID; 
@end 

@implementation UIApplication (utilities) 

- (NSString*)getUUID { 

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults]; 

    static NSString *uuid = nil; 

    // try to get the NSUserDefault identifier if exist 
    if (uuid == nil) { 

     uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"]; 
    } 

    // if there is not NSUserDefault identifier generate one and store it 
    if (uuid == nil) { 

     uuid = UUID(); 
     [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"]; 
     [standardUserDefault synchronize]; 
    } 

    return uuid; 
} 

@end 

UUID()この関数

NSString* UUID() { 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    return (__bridge NSString *)uuidStringRef; 
} 

でこのアプリケーションがそれを必要とするたびにNSUserDefaultに記憶された固有の識別子が再利用されるように生成する - この識別子はするアプリケーションに関連する固有のデバイスにしないインストールされますが、使用することができます数デバイスに関するトレースを取るために、たとえばあなたがこの方法でそれを使用することができ、その後...など

をAPNサービスを加入:

NSString *uuid = [[UIApplication sharedApplication] getUUID]; 
関連する問題