13

appStoreReceiptURL を使用して、誰かが購入したアプリのバージョンを確認したいと考えています。これを文字列にするにはどうすればよいですか?

ストアからアプリをダウンロードし、Xcode から新しいバージョンのアプリを実行して、これをテストしています。これが私が試したことです:

NSURL *receiptUrl = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"receiptUrl %@",[receiptUrl path]);
if ([[NSFileManager defaultManager] fileExistsAtPath:[receiptUrl path]]) {
        NSLog(@"exists");
         NSError *error;
         NSString *receiptString = [[NSString alloc] initWithContentsOfFile:[receiptUrl path] encoding:NSUTF8StringEncoding error:&error];
         if (receiptString == nil) {
              NSLog(@"Error: %@", [error localizedDescription]);
         } else {
             NSLog(@"Receipt: %@",receiptString);
        }

} else {
        NSLog(@"does not exist");
}

これは私が得るものです:

receiptUrl /var/mobile/Applications/E612F261-2D30-416E-BF82-F24xxxx8860/StoreKit/receipt
exists
Error: The operation couldn’t be completed. (Cocoa error 261.)
4

3 に答える 3

11

これは私が使用するコードです:

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];

NSString *encReceipt = [receiptData base64EncodedStringWithOptions:0];

これが役立つことを願っています。

于 2015-07-07T14:46:03.723 に答える
0

Cocoa エラー 261 はNSFileReadInapplicableStringEncodingErrorです。

ファイルを UTF8 として読み取ろうとするのではなく、試しましたNSASCIIStringEncodingか?

NSString *receiptString =
    [[NSString alloc] initWithContentsOfFile:[receiptUrl path] 
                                    encoding:NSASCIIStringEncoding
                                       error:&error];

また、ファイルの実際のエンコーディングがわからない場合は、推測する代わりに次を使用できます。

NSStringEncoding *encoding = nil;
NSString *receiptString =
    [NSString stringWithContentsOfFile:[receiptUrl path]
                          usedEncoding:&encoding
                                 error:NULL]; 
于 2013-09-20T19:40:26.173 に答える