在App Purchase iOS中访问AppleId

时间:2012-12-24 17:03:30

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

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

1 个答案:

答案 0 :(得分:4)

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

但是,如果您使用的是越狱设备,则可以从钥匙串获取必要的信息。相应的钥匙串项目的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>