2

UDID の使用が廃止されたため、Vendor Identifier を使用していますが、このアプリを使用した後、iOS バージョン 6.0 未満のデバイスでは動作しません。誰が何をする必要があるか教えてもらえますか? アプリは iOS 6.0 以降でのみサポートされますか? iOS バージョン 6.0 未満のデバイスでアプリを機能させるにはどうすればよいですか? 以下は私が使用しているコードです:

static NSString *uniqueIdentifier = nil;
id vendorIdObject = [[UIDevice currentDevice] identifierForVendor];
uniqueIdentifier = [vendorIdObject UUIDString];
4

2 に答える 2

6

次のようなことができます (これが返す識別子はデバイスにバインドされておらず、ユーザーがアプリを削除して再インストールすると変更されることに注意してください):

NSString* uniqueIdentifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
  // iOS 6+
  uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
  // before iOS 6, so just generate an identifier and store it
  uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"];
  if( !uniqueIdentifier ) {
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    uniqueIdentifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
    [[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"];
  }
}

これにより、iOS-6 より前の識別子が生成され、デフォルトで保存されるため、通常は同じ識別子になります。と同様の方法で識別子を使用する必要があるキーチェーン グループと一連のアプリがある場合はidentifierForVendor、ユーザーのデフォルトの代わりにキーチェーンに格納できます。

于 2013-06-26T06:45:52.953 に答える
0

考えられる解決策:

  1. 実行時に iOS のバージョンを確認する
  2. iOS 6+の場合identifierForVendor
  3. iOS 6未満の場合uniqueIdentifier

編集: rmaddy が言ったように、アプリストアはアプリを拒否します。

したがって、最良の方法は次を使用することCFUUIDCreate()です:

CFUUIDRef locUDIDRef = CFUUIDCreate(NULL);  
CFStringRef locUDIDRefString = CFUUIDCreateString(NULL, locUDIDRef);  
NSString *locUDID = [NSString stringWithString:(NSString *) locUDIDRefString];  
CFRelease(locUDIDRef);  
CFRelease(uuidStringRef);  

iOS 6 での UDID の参照代替

于 2013-06-26T06:28:27.243 に答える