标签: storekit

使用transactionReceipt生成JSON对象

过去几天我一直试图测试我的第一个应用程序中的purchse iphone应用程序.不幸的是我无法找到与iTunes服务器通信以验证transactionReceipt的方法.

因为这是我第一次尝试使用这项技术,所以我选择直接从iPhone验证收据,而不是使用服务器支持.但是在尝试使用来自谷歌代码的JSON api创建的JSON onbject发送POST请求之后,itunes总是返回一个奇怪的响应(而不是我等待的"status = 0"字符串).

这是我用来验证收据的代码:

- (void)recordTransaction:(SKPaymentTransaction *)transaction {
    NSString *receiptStr = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding];
    NSDictionary *jsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"algo mas",@"receipt-data",nil];

    NSString *jsonString = [jsonDictionary JSONRepresentation];
    NSLog(@"string to send: %@",jsonString);

    NSLog(@"JSON Created");
    urlData = [[NSMutableData data] retain];

    //NSURL *sandboxStoreURL = [[NSURL alloc] initWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"will create connection");
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}
Run Code Online (Sandbox Code Playgroud)

也许我忘记了请求标题中的内容,但我认为问题出在我用来创建JSON对象的方法中.

在将JSON对象添加到HTTPBody之前,它是如何看起来的:

    string to send: {"receipt-data":"{\n\t\"signature\" = \"AUYMbhY

       ...........

D0gIjEuMCI7Cn0=\";\n\t\"pod\" = \"100\";\n\t\"signing-status\" = \"0\";\n}"} …
Run Code Online (Sandbox Code Playgroud)

json itunesconnect objective-c storekit iphone-sdk-3.0

8
推荐指数
1
解决办法
2万
查看次数

永远不会调用SKProductsRequest委托方法

这曾经为我工作,但现在不再工作,我无法弄清楚为什么.我在我的应用中有应用内购买设置.我确认我有一套正确的产品标识符,并与itunesconnect中相应的应用内购买项目相匹配.这个电话是苹果公司的观点[productRequest start],但我从来没有得到过回复,尽管将代表委托给自己.我错过了什么?

NSLog(@"productIdentifiersSet: %@", productIdentifiersSet);
if ([productIdentifiersSet count]) {
    SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiersSet];
    [productRequest setDelegate:self];
    [productRequest start];
}
Run Code Online (Sandbox Code Playgroud)

.........

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
   <never called>
}

- (void)requestDidFinish:(SKRequest *)request {
    <never called>
}

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
    <never called>
}
Run Code Online (Sandbox Code Playgroud)

iphone delegates response storekit in-app-purchase

8
推荐指数
1
解决办法
4511
查看次数

处理取消的IAP交易

我正在使用StoreKit进行应用内购买.当用户按下"取消"按钮时,我发现API的行为很古怪.

例如,如果我在"确认您的应用内购买"屏幕上按"取消",我会按照我的预期获得SKPaymentTransactionStateFailed交易error.code == SKErrorPaymentCancelled.

但如果我按下Buy然后按取消,我就会收到Failed交易error.code == 0.这error.localizedDescription是"无法连接到iTunes Store"这显然是一个谎言.

将所有Failed交易视为可忽略的取消很有诱惑力,但我也可以清楚地看到,如果设备在飞机模式下处于离线状态,我会得到一个Failed没有警报弹出窗口的交易; 在这种情况下,我应该通知用户解释问题.

我注意到MKStoreKit假设所有失败都是取消.MKStoreManagerfailedTransaction方法不会被调用; MKStoreObserver总是要求transactionCanceled所有Failed交易.该MKStoreManager.h意见建议没有错误消息transactionCanceled,这是有道理的,但谁就会通知给用户的Failed非交易取消?

处理这些故障的最佳做法是什么?我应该吞下错误吗?始终显示错误,即使它是多余的?

iphone storekit in-app-purchase

8
推荐指数
1
解决办法
7567
查看次数

Storekit/In App Purchase:当我将应用程序提交到应用商店时,"Environment:Sandbox"标签是否会消失?

这是我第一次实施In App Purchases.在开发和测试我的In App Purchase时,我在购买过程中看到以下警告:

在此输入图像描述 在此输入图像描述 在此输入图像描述

我的应用程序内购买工作完美,应用程序接近提交.

在提交应用程序之前我是否必须做一些事情(使"环境:沙盒"标签消失)或者在我提交时自动处理所有这些内容?

iphone app-store storekit in-app-purchase

8
推荐指数
1
解决办法
1029
查看次数

SKStoreproductviewcontroller在横向模式下截断

我刚刚添加了SKStoreProductViewController并从我自己的UIViewController中呈现了它.如果我将设备旋转到横向模式 - 只有标题适合宽度,其他部分将被截断

....
NSDictionary *parameters = @{SKStoreProductParameterITunesItemIdentifier:[NSNumber numberWithInteger:[productID integerValue]]};

    [self.storeViewController loadProductWithParameters:parameters
                                   completionBlock:^(BOOL result, NSError *error) {
                                       if (result)
                                       {
                                           [presentingViewController presentModalViewController:self.storeViewController
                                                                                       animated:YES];
                                       }
                                       handler(result);
                                   }];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

是否有可能在横向模式下调整"产品页面",使其看起来不错?

环境:iPhone 4S IOS 6.0.1

iphone uiviewcontroller storekit ios

8
推荐指数
1
解决办法
848
查看次数

如何在iOS上解压缩.zip文件?

在StoreKit下载IAP内容包后,它会向我返回一个NSURL,如下所示:

文件://localhost/private/var/mobile/Applications/45EF2B3A-3CAB-5A44-4B4A-631A122A4299/Library/Caches/BA32BC55-55DD-3AA4-B4AC-C2A456622229.zip/

尽管我发现所有来源都声称StoreKit在下载后解压缩了内容包,但它还是通过ZIP传递给我.此ZIP可能包含内容包的文件结构.但是我如何解压缩呢?

iphone objective-c storekit in-app-purchase ios

8
推荐指数
2
解决办法
3万
查看次数

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]没有回复

我正在尝试为我的Mac应用设置应用内购买.购买产品工作正常,但我无法[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]工作.

设置事务观察器(否则购买将无效)并使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]恢复以前的所有购买.

StoreKit现在应该使用paymentQueue:updatedTransactions:恢复交易和paymentQueueRestoreCompletedTransactionsFinished:paymentQueue:restoreCompletedTransactionsFailedWithError:报告成功或失败.但是没有这些方法被称为.绝对没有回应.

如果我使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions],我得到以下输出:

忽略restoreCompletedTransactions,因为已经恢复了事务

有很多讨论,其中restoreCompletedTransactions返回一个空结果.但就我而言,根本就没有结果.

我怎样才能知道出了什么问题?

macos storekit in-app-purchase

8
推荐指数
1
解决办法
740
查看次数

订阅续订未在latest_receipt_info中显示

我们的后端进行服务器端收据验证.为了检查可续订订阅的最后到期日期,我们查看latest_receipt_info中的信息.这种方法大多数时候都有效.

但是,我们遇到一些用户,即使有活动订阅,latest_receipt_info也只包含已经过期的初始订阅.我想知道是否有人已经遇到了这个错过交易的问题.这看起来非常奇怪,因为Apple没有返回正确的信息.这些用户收费正常,但Apple的回复并未反映出这一点.我错过了什么吗?文档远非伟大......谢谢!

iphone storekit in-app-purchase ios

8
推荐指数
0
解决办法
614
查看次数

SSErrorDomain,SKReceiptRefreshRequest,SKRequest失败,错误,代码= 16,代码= 110

iOS 9.2.1,Xcode 7.2.1,ARC启用

我使用下面的方法来检查的失败SKProductsRequestSKReceiptRefreshRequest:

- (void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"error: %@", error);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是具体的SKReceiptRefreshRequest.我正在测试两个条件,(1)当用户取消登录到iTunes Store以获取收据请求时,以及(2)当用户尝试登录并且没有连接时(飞机模式).

我收到以下错误:

没有连接时:

错误域= SSErrorDomain代码= 110"无法连接到iTunes Store"UserInfo = {NSLocalizedDescription =无法连接到iTunes Store,NSUnderlyingError = 0x13c76d680 {错误域= NSURLErrorDomain代码= -1009"无法连接到iTunes Store"UserInfo = {NSLocalizedDescription =无法连接到iTunes Store,NSErrorFailingURLStringKey =

{您的产品ID和相应的URI}

,_kCFStreamErrorCodeKey = 8,_kCFStreamErrorDomainKey = 12,NSLocalizedDescription = Internet连接似乎处于脱机状态.}}}

当用户点击取消时:

错误域= SSErrorDomain代码= 16"无法连接到iTunes Store"UserInfo = {NSLocalizedDescription =无法连接到iTunes Store,NSUnderlyingError = 0x13c6ac7b0 {错误域= AKAuthenticationError代码= -7003"(null)"}}

我使用原始错误代码来区分错误并触发相应的UI事件来处理错误状态.但我一直在这样做,却没有理解底层错误是什么.

两者之间的常见错误域是SSErrorDomain.

有人可以详细说明SSErrorDomain是什么以及它属于哪个框架?另外,您能否提供一些有关此域名的所有可能错误代码的有用文档?

提前致谢!

storekit nserror ios

8
推荐指数
0
解决办法
2253
查看次数

Xcode 12 iOS 14 .storekit 恢复购买测试

如何在 Xcode 12 中使用新的 .storekit 测试恢复购买?当我打电话时SKPaymentQueue.default().restoreCompletedTransactions(),它直接转到paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue)0 个事务。

在这段25 分钟的 WWDC 视频这篇同样来自 Apple 的文档文章以及 Internet 上的任何少数教程中,都没有提到“恢复” 。更令我困惑的是我找不到任何关于此的抱怨/问题?!

我觉得我已经疯了。如果有人可以点亮一些灯,那就太好了。提前致谢!

testing restore storekit in-app-purchase xcode12

8
推荐指数
1
解决办法
361
查看次数