advertisingIdentifier
とidentifierForVendor
を取得するためにこのメソッドを実装しました。
- (NSString *) advertisingIdentifier
{
if (!NSClassFromString(@"ASIdentifierManager")) {
return [OpenUDID value];
}
return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}
- (NSString *) identifierForVendor
{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
return @"";
}
- (BOOL)isAdvertisingTrackingEnabled
{
if (NSClassFromString(@"ASIdentifierManager") && ![[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
return NO;
}
return YES;
}
シミュレーターでは、すべてが正常に機能しており、2つの文字列ID表現を取得できます。
しかし iOS 6.0(10A403)を搭載したiPhone 3GSから実行すると、これら2つのメソッドは識別子として「00000000-0000-0000-0000-000000000000」を返します。すでに完了:
IOSのバグのようです。無線でアップグレードされたデバイスでも同じ問題が発生しますが、XcodeまたはiTunesでアップグレードされたデバイスは、ゼロなしで期待どおりに機能します。
あなたと同様の手順を試しましたが、共通のテーマは無線(悪い)とテザーアップグレード(良い)だけでした。
更新: iOS 5.1から6.1の無線に直接移行するユーザーは、異なる動作を経験します。アプリを完全に閉じて再起動するたびに、identifierForVendor
によって新しい値が返されます。これは、アプリがアンインストールおよび再インストールされている場合に予想されますが、そうではありません。
Appleは、テクニカルサポートインシデントのリクエストに応じて、システムのこのバグを確認しました。彼らは、identifierForVendor
とadvertisingIdentifier
が時々すべてゼロを返すことは、開発ビルドとAppStoreから無線でダウンロードされたアプリの両方で見られると言いました。彼らには回避策がなく、問題がいつ修正されるかを言うことができません。
デバイスの復元後のように、APIがIDに対して空の応答を返す場合があります。
IDの取得を延期することをお勧めします。これにより、次のようにsometginhを呼び出すことができます。
-(void)retrieveID
{
if (<check fails>)
[self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}
後でIDを取得します。