【问题标题】:In App Purchase iOS access AppleId在 App Purchase iOS 访问 AppleId
【发布时间】:2012-12-11 00:42:53
【问题描述】:

在购买完成后进行应用内购买(电子邮件或他们的内部 ID)时,有没有办法访问用户在身份验证对话框中输入的 Apple ID?

【问题讨论】:

    标签: objective-c ios in-app-purchase userid


    【解决方案1】:

    在官方应用程序中,无法访问它,因为它会带来很大的安全漏洞(例如,可以轻松地将垃圾邮件发送到指定的电子邮件地址)。

    但是,如果您使用的是越狱设备,则可以从钥匙串中获取必要的信息。相应的钥匙串项将其svce 密钥设置为com.apple.itunesstored.token,并且电子邮件地址对应于acct 密钥。这些条目的安全等级是kSecClassGenericPassword。只需确保您使用适当的权利对您的应用进行代码设计(您需要"keychain-access-groups" = "*")。

    检索所需信息的实际示例如下:

    #import <CoreFoundation/CoreFoundation.h>
    #import <Foundation/Foundation.h>
    #import <Security/Security.h>
    
    int main()
    {
        NSMutableDictionary *query = [NSMutableDictionary dictionary];
        [query setObject:kSecClassGenericPassword forKey:kSecClass];
        [query setObject:kSecMatchLimitAll forKey:kSecMatchLimit];
        [query setObject:kCFBooleanTrue forKey:kSecReturnAttributes];
        [query setObject:kCFBooleanTrue forKey:kSecReturnRef];
        [query setObject:kCFBooleanTrue forKey:kSecReturnData];
        NSArray *items = nil;
        SecItemCopyMatching(query, &items);
    
        for (NSDictionary *item in items) {
            if ([[item objectForKey:@"svce"] isEqualToString:@"com.apple.itunesstored.token"]) {
                NSLog(@"Found iTunes Store account: %@", [item objectForKey:@"acct"]);
            }
        }
    
        return 0;
    }
    

    entitlements.xml 文件(使用ldid -Sentitlemens.xml binary 进行代码设计):

    <plist>
    <dict>
        <key>keychain-access-groups</key>
        <array>
            <string>*</string>
        </array>
    </dict>
    </plist>
    

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2016-11-23
      • 2016-03-15
      • 2017-05-29
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多