标签: storekit

在应用购买测试期间的EXC_BAD_ACCESS

为我的应用内购买运行测试(第一次在应用内购买).我在这段代码的第三行得到了EXC_BAD_ACCESS:

    SKPayment *payment = [SKPayment paymentWithProduct:electronicProd];
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)

这是一个按钮的IBAction.electronicPack在标题中声明为SKProduct.在productsRequest didReceiveResponse中抛出了一些NSLog,当请求产品时(在viewDidLoad中),他们表明它正确地获取产品并将其存储在electronicPack中.在didReceiveResponse页面中将electronicPack定义为[[request.products] objectAtIndex:0].所以是的.多数民众赞成在哪里,不知道该怎么做.任何帮助表示赞赏.

更新:FIXED意外遗留在添加额外事务观察器的代码中lol

iphone xcode objective-c storekit in-app-purchase

22
推荐指数
4
解决办法
5541
查看次数

在iOS模拟器中恢复iOS In App Purchase时"无法连接到iTunes商店"

我已经查看了iOS StoreKit中与"无法连接到iTunes商店"相关的许多现有问题,我认为我的情况不包括在内:

在iOS模拟器中运行时,恢复之前购买的应用内购买后出现"无法连接到iTunes商店"错误.如果我点击取消,则弹出窗口消失,恢复成功.

购买应用内购买时,只有在恢复时才会出现问题.

此外,问题只出现在模拟器上,而不是在真正的iPhone上进行测试时.

我很确定一切都好,只是想确认它只是一个模拟器错误.还有谁见过这个?

storekit in-app-purchase ios

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

在应用程序购买之后,应用程序在启动时崩溃.产品识别=无?

我有一些用户报告说,在尝试购买应用程序后,该应用程序现在在启动时崩溃.我已要求他们删除并重新安装尚未运行的应用程序,并试图让他们进入飞行模式以停止任何无效的网络通信.

我无法在我的设备上复制错误,我的应用程序购买在沙箱和生产模式中完成得很好.我的想法是,他们的事务以某种方式收到了一个nil productIdentifier,导致启动崩溃,但我不确定在app启动时调用哪些事务观察器方法,我可以为他们解决问题.

有没有办法"清除"事务队列或在启动时测试nil productidentifier并允许这些用户至少再次运行应用程序?我已经使用下面的代码完成了几百个应用内购买,而这最近刚开始发生.在app启动时调用哪个辅助方法?

在AppDelegate.m中

[[SKPaymentQueue defaultQueue] addTransactionObserver:[MovieClockIAPHelper sharedHelper]];
Run Code Online (Sandbox Code Playgroud)

在app帮助程序代码中:

- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {
    if ((self = [super init])) {

        // Store product identifiers
        _productIdentifiers = [productIdentifiers retain];

        // Check for previously purchased products

        NSMutableSet * purchasedProducts = [NSMutableSet set];
        for (NSString * productIdentifier in _productIdentifiers) {

            BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];

            if (productPurchased) {
                [purchasedProducts addObject:productIdentifier];
                NSLog(@"Previously purchased: %@", productIdentifier);
            }
            else{
            NSLog(@"Not purchased: %@", productIdentifier);
            }
        }
        self.purchasedProducts = purchasedProducts;

    }
    return self;
}

- (void)requestProducts …
Run Code Online (Sandbox Code Playgroud)

null storekit in-app-purchase ios

22
推荐指数
2
解决办法
5521
查看次数

如何使用requestReview(SKStore Review Controller)在一段随机时间后在当前viewController中显示查看弹出窗口

我已经阅读了iOS 10.3中提供的这一新功能,并认为它将更灵活,开箱即用.但是在我阅读了文档后,我发现你需要决定显示它的时间和调用它的viewController.有没有什么方法可以让我在任何一个viewController在那一刻显示的随机时间后触发它?

objective-c storekit ios

22
推荐指数
5
解决办法
1万
查看次数

点按"继续"并登录以检查下载量.[沙盒]

有时我会在文本中遇到一个非常讨厌的对话框:"点击继续并登录以检查下载." 如果我登录(使用沙箱用户)或点击取消,则会立即再次显示该对话框.

我正在使用非续订订阅和非消费品.

任何想法如何摆脱这个对话?

谢谢

/马丁

itunesconnect app-store storekit

21
推荐指数
2
解决办法
9968
查看次数

iOS上的StoreKit - autorenewable订阅 - 如何知道它是否是免费试用?

在iTunes Connect中,可以为自动续订订阅提供免费试用期.

App > Manage In App Purchases > Subscription Basic > 1 Month >  Offer a free trial?
Run Code Online (Sandbox Code Playgroud)

如何在客户端获取此信息?SKProduct我可以看到没有关于此的任何信息.由于我们正在进行营销活动,因此最终用户看不到有关产品的信息有试用期非常困惑.

当然可以从我维护的服务器获取这种信息,但是我们将有更新我们的服务器和iTunes Connect的开销.所以我不接受这种答案,除非它连接起来从Apple的服务中检索试用期信息.

iTunes Connect的屏幕截图

iphone itunesconnect storekit ios skproduct

21
推荐指数
2
解决办法
4123
查看次数

我应该何时验证应用内购买交易收据?

我的意思是,我的步骤应该是什么?

1)得到SKPaymentTransactionStatePurchased

2)从SKPaymentQueue中删除它并提供内容[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

3)验证收据然后,如果它无效,则阻止我刚刚提供的内容

或者我应该将第二步改为第三步?

1)得到SKPaymentTransactionStatePurchased

2)验证收据然后,如果它无效,则不提供内容

3)SKPaymentQueue无论如何都要将它取下[[SKPaymentQueue defaultQueue] finishTransaction: transaction];

在第一种情况下,用户可以在购买后立即关闭互联网,因此我将无法验证收据.但是在第二步中,在步骤1和步骤2之间可能会出现一些互联网问题,所以我不会完成交易,也不会提供内容,这将是糟糕的用户体验.

那你选择了什么样的应用程序?为什么?

我的选择

我选择了第二种情况,因为选择第一种方案会让我的应用程序很容易被iAP Cracker破解.

security user-experience storekit in-app-purchase ios

19
推荐指数
2
解决办法
5058
查看次数

我们可以检查用户的In App Purchase是否已被Apple退还?

情况:
- 用户进行IAP并获得一些内容,我们存储用户设备ID以确保他们可以随时访问此内容.
- 用户认为他们不喜欢这些内容,因此他们致电Apple并获得退款.
- 即使已经为其IAP退款,用户仍然可以访问内容

问题:
我们不希望用户再次访问此内容.这可能成为他们利用的漏洞.(解锁内容,然后获得退款并保持对所述内容的访问权限)

问题:我们
是否有办法检查用户是否已使用transactionId,transactionReceipt或我们可能拥有的任何其他信息退还IAP?

作为参考,我已经阅读了StoreKitGuide,它没有提到这种情况.

iphone storekit in-app-purchase ios

18
推荐指数
1
解决办法
8550
查看次数

在应用程序购买自动更新内容提示用户共享信息

我正在添加通过iOS SDK的StoreKit API购买自动更新内容的功能.

在我的iOS设备上的沙箱中测试时,同意购买后,警报中会显示以下消息:

分享您的信息?[app name here]的发布者希望根据他们的隐私政策使用您的姓名,电子邮件和邮政编码.

使用"不允许"和"允许"按钮

我不想/需要这些信息,也不想通过提示来惹恼我的用户.但是,我无法弄清楚如何禁用此提示来收集私人信息.

任何提示表示赞赏!

storekit in-app-purchase ios

18
推荐指数
1
解决办法
4939
查看次数

应用程序内购买适用于iPhone但不适用于iPad

我在iOS上进行应用内购买时遇到问题.我在游戏中有5个应用内购买,所有这些都在iPhone 6(iOS 8.3)上测试时完全按照预期工作.当我在iPad Air 2(iOS 8.2)上进行测试时,所有IAP都会立即失败.还有其他人遇到过这个问题吗?是否有一些我必须添加的特定于iPad的代码?

编辑:奇怪的是,将iPad更新到iOS 8.3修复了这个问题.关于为什么会出现这个问题的任何想法?我应该将我的应用程序更改为仅支持iOS 8.3及更高版本吗?

为了测试应用程序,我使用的是TestFlight,相同的网络连接和相同的Apple ID.

我用于应用程序内购买的代码如下:

func inApp() {
    if (SKPaymentQueue.canMakePayments())
    {
        var productID:NSSet = NSSet(object: product_id);
        var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>);
        productsRequest.delegate = self;
        productsRequest.start();
    }else{
        displayAlert()
    }
}

func buyProduct(product: SKProduct){
    var payment = SKPayment(product: product)
    SKPaymentQueue.defaultQueue().addPayment(payment);

}

func productsRequest (request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
    var count : Int = response.products.count
    if (count>0) {
        var validProducts = response.products
        var validProduct: SKProduct = response.products[0] as! SKProduct
        if (validProduct.productIdentifier == product_id) …
Run Code Online (Sandbox Code Playgroud)

storekit in-app-purchase ios swift

18
推荐指数
1
解决办法
1161
查看次数