26

私はこのメソッドを実装して取得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 6.0(10A403)を搭載したiPad 2でテストし、すべて問題なく動作しました(正しい識別子があります)
4

3 に答える 3

25

iOSのバグのようです。無線でアップグレードされたデバイスでも同じ問題が発生しますが、XcodeまたはiTunesでアップグレードされたデバイスは、ゼロなしで期待どおりに機能します。

あなたと同じような手順を試しましたが、唯一の共通のテーマは、無線(悪い)とテザーアップグレード(良い)でした。

更新: iOS 5.1から6.1の無線に直接移行するユーザーは、異なる動作を経験します。アプリを完全に閉じて再起動するたびに、によって新しい値が返されidentifierForVendorます。これは、アプリをアンインストールして再インストールする場合に予想されますが、そうではありません。

于 2012-09-26T18:30:30.923 に答える
8

Apple は、テクニカル サポート インシデントのリクエストに応じて、システムにこのバグがあることを確認しました。彼らは、開発ビルドと App Store から無線でダウンロードされたアプリの両方で、すべてゼロを返すことがあるidentifierForVendorと述べています。advertisingIdentifier彼らには回避策がなく、問題がいつ修正されるかはわかりません。

于 2012-10-20T19:57:06.743 に答える