| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "FIAPReceiptManager.h" |
| #if TARGET_OS_OSX |
| #import <FlutterMacOS/FlutterMacOS.h> |
| #else |
| #import <Flutter/Flutter.h> |
| #endif |
| #import "FIAObjectTranslator.h" |
| |
| @interface FIAPReceiptManager () |
| // Gets the receipt file data from the location of the url. Can be nil if |
| // there is an error. This interface is defined so it can be stubbed for testing. |
| - (NSData *)getReceiptData:(NSURL *)url error:(NSError **)error; |
| |
| @end |
| |
| @implementation FIAPReceiptManager |
| |
| - (NSString *)retrieveReceiptWithError:(FlutterError **)flutterError { |
| NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; |
| if (!receiptURL) { |
| return nil; |
| } |
| NSError *receiptError; |
| NSData *receipt = [self getReceiptData:receiptURL error:&receiptError]; |
| if (!receipt || receiptError) { |
| if (flutterError) { |
| NSDictionary *errorMap = [FIAObjectTranslator getMapFromNSError:receiptError]; |
| *flutterError = [FlutterError errorWithCode:errorMap[@"code"] |
| message:errorMap[@"domain"] |
| details:errorMap[@"userInfo"]]; |
| } |
| return nil; |
| } |
| return [receipt base64EncodedStringWithOptions:kNilOptions]; |
| } |
| |
| - (NSData *)getReceiptData:(NSURL *)url error:(NSError **)error { |
| return [NSData dataWithContentsOfURL:url options:NSDataReadingMappedIfSafe error:error]; |
| } |
| |
| @end |