标签: storekit

当事务更新时,StoreKit不会调用paymentQueue

我正在尝试使用此代码进行交易:

  SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.this.is.where.the.identifier.is"];
  [[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)

事务处理很好,但-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions没有调用,因此无法更新我的应用程序以启用专业功能.我已将委托协议包含SKPaymentTransactionObserver在头文件中.

iphone storekit in-app-purchase ios

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

SKProductsRequest - 现在没有回应(正在运行 - 相同的代码)

代码如下 - 这个代码昨天工作提供无效ID现在更长的工作,我已经代码大约10次

.M

 #import <UIKit/UIKit.h>
 #import <StoreKit/StoreKit.h>

@interface InAppViewController : UIViewController  <SKProductsRequestDelegate, SKPaymentTransactionObserver> {

    SKProduct *proUpgradeProduct;
    SKProductsRequest *productsRequest;
}
Run Code Online (Sandbox Code Playgroud)

.H

#import "InAppViewController.h"


@implementation InAppViewController

- (void)viewDidLoad{
    [self requestProUpgradeProductData];
}

- (void)dealloc {
    [super dealloc];
}

- (void)requestProUpgradeProductData
{
    NSLog(@"called  productsRequest");

    NSSet *productIdentifiers = [NSSet setWithObject:@"com.okz8.investor.gem15" ];
    productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
    productsRequest.delegate = self;
    [productsRequest start];

    // we will release the request object in the delegate callback
}

#pragma mark -
#pragma mark SKProductsRequestDelegate methods

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse …
Run Code Online (Sandbox Code Playgroud)

iphone sdk storekit in-app-purchase

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

在多个ios设备之间共享应用商品订阅中的非续订

我的应用程序最近被itunes商店拒绝,原因如下.

11.6使用IAP的内容订阅必须至少持续7天,并且可供用户从其所有iOS设备使用

我通过以下链接 如何恢复不续订的Apple订阅

但没有得到如何在多个ios设备之间分享在app项目中购买的内容.我在应用商品中使用不续订.

任何好友都有这个想法.帮助将不胜感激.提前致谢.

storekit in-app-purchase ios

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

如何按价格值对SKProduct数组进行排序

我试图在发送产品ID列表后对从Apple Server收到的SKProduct数组进行排序.

我想通过使用以下内容进行排序:

NSSortDescriptor *lowestPriceToHighest = [NSSortDescriptor sortDescriptorWithKey:@"self.price" ascending:YES];
NSArray *sortedProducts = [products sortedArrayUsingDescriptors:[NSArray arrayWithObject:lowestPriceToHighest]];
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:Unable to access variable "lowestPriceToHighest" 我的排序描述符是否被错误地定义了?

sorting nsarray storekit in-app-purchase ios

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

Store Kit在第二次请求时崩溃

我正在构建我的第一个Store Kit应用程序并遇到崩溃问题:

该应用程序是一个精灵套件游戏

MainMenuScene.swift我分配RemoveAdButton
时,我调用该initPurchaseRemoveAds()函数

MainMenuScene.swift e = SKPaymentQueue.defaultQueue()

    func initPurchaseRemoveAds() {
        let actionRotate = SKAction.rotateByAngle(CGFloat(M_2_PI), duration: 0.1)
        let spin = SKAction.repeatActionForever(actionRotate)
        self.loadingwheel.runAction(spin)
        self.loadingwheel.hidden = false
        NSNotificationCenter.defaultCenter().postNotificationName(KeyValueKeyClassification.NotificationBuyRemoveAd.rawValue, object: nil, userInfo: nil)
    }
Run Code Online (Sandbox Code Playgroud)

GameViewController.swift

var request : SKProductsRequest?
var queue : SKPaymentQueue. = SKPaymentQueue.defaultQueue()

// called through the notification (works!)
func initPurchase(notification: NSNotification) {
    println("user clicked remove ads")
    if SKPaymentQueue.canMakePayments() {
        println("user can make payments")
        self.request = SKProductsRequest(productIdentifiers: NSSet(object: PurchaseClassification.RemoveAdID.rawValue as String))
        self.request?.delegate = self
        self.request?.start() …
Run Code Online (Sandbox Code Playgroud)

storekit in-app-purchase ios sprite-kit swift

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

Swift:如何将 Date() 转换为苹果服务器的时区以验证收据?

使用 Swift 3

当我调用此代码时,它显示为我的时区

let date = Date()
let todayDate = formatter.string(from: date)
print(todayDate)
Run Code Online (Sandbox Code Playgroud)

我从 StoreKit 收据调用 JSON 响应来检查original_purchase_dateexpires_date比较它todayDate以验证收据。

我想做的事,例如

if (todayDate > expires_date ) {
    cancel subscription
}
Run Code Online (Sandbox Code Playgroud)

如果Apple的purchase_date和expires_date位于GMT时区,而todayDate位于用户所在的任何时区,则我无法匹配日期。

因此,我只需要在调用 Date() 时转换用户所在的时区,并将其转换为 GMT(就像 Apple 的服务器一样),这样我就可以检查 TodayDate 是否已通过自动更新订阅上的过期数据。

另外,这是防止应用程序黑客攻击的好方法吗?我使用 php 从我的服务器获取了收据,该收据从 Apple 进行了验证。

if parseJSON["status"] as? Int == 0 {

print("Status Code for Receipt = 0!")

// Checking "latest_receipt_info"
if let receiptInfo: NSArray = parseJSON["latest_receipt_info"] as? NSArray {
    let lastReceipt = receiptInfo.lastObject as! NSDictionary …
Run Code Online (Sandbox Code Playgroud)

datetime storekit in-app-purchase ios swift

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

SKPaymentTransaction expires_date,似乎“自动续订”机制在沙箱中不起作用

我几乎已经在我的应用程序中管理了自动续订订阅,但发生了一件奇怪的事情 - 它不会自动续订。

我有一个按钮,它在我的产品中添加了 SKPayment,并为我提供了带有 SKPaymentTransaction 的收据,这非常活跃。

然后我保存该收据并尝试再次将其发送给Apple以检查过期日期。它会返回我第一次购买的日期,而不是最后一次购买的日期expiredate。当订阅期结束时(在沙盒中的五分钟内) ),它只返回我 21002

但是,如果我再次手动续订,新收据会为我提供更新的到期日期,我再次保存它,一切都会顺利进行。

是的,original_purchase_date这两个接待都是一样的。

也许我只是不明白,检查过期日期是如何工作的?

sandbox objective-c storekit in-app-purchase ios

0
推荐指数
1
解决办法
1898
查看次数

在沙箱模式下,应用内购买交易失败,SKErrorPaymentCancelled

上下文

  • 产品正确加载通过 SKProductRequest
  • 通过itunes测试用户设置连接并验证
  • 从设备上的"普通用户"帐户注销
  • 以设备上的测试用户身份登录

问题

  • 付款交易失败,SKErrorPaymentCancelled没有来自用户的任何操作
  • 该应用程序被重定向到iTunes Store并不断询问用户凭据

testing storekit ios7

0
推荐指数
1
解决办法
1207
查看次数

IAP正在恢复尚未购买的时候

当用户调用restorePurchases()时,即使他们不拥有它,也会恢复非耗材com.premium.以下是负责恢复购买和购买IAP的功能.这只是非耗材IAP的问题.购买没有问题.如果用户尝试购买他们已经拥有的IAP,则只需恢复.感谢您关注此事.

func restorePurchases() {
    SKPaymentQueue.default().add(self)
    SKPaymentQueue.default().restoreCompletedTransactions()
}

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
    print("transactions restored")

    for transaction in queue.transactions {
        let t: SKPaymentTransaction = transaction 

        let prodID = t.payment.productIdentifier as String
        print("starting restoring")
        switch prodID {
        case "com.premium":
            print("restoring ads")
            removeAds()
        case "com.cash":
            print("we dont restore coins")
        case "com.level":
            print("we dont restore levels")
        default:
            print("can't restore")
        }
    }
Run Code Online (Sandbox Code Playgroud)

这也是我的支付队列.

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    print("add paymnet")

    for transaction:AnyObject in transactions {
        let trans = transaction as! SKPaymentTransaction
        print(trans.error) …
Run Code Online (Sandbox Code Playgroud)

storekit ios swift

0
推荐指数
1
解决办法
484
查看次数

Swift:如何在购买完成时通知

SKPaymentTransactionObserver购买完成后我有支票

extension IAPService: SKPaymentTransactionObserver {
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    for transaction in transactions {
        print(transaction.transactionState.status(), transaction.payment.productIdentifier)
        if transaction.transactionState.status() == "purchased" {
            // Pro Purchased
        }
        switch transaction.transactionState {
        case .purchasing: break
        default: queue.finishTransaction(transaction)
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

ViewController购买完成后,如何隐藏购买的对象

storekit ios swift

0
推荐指数
1
解决办法
475
查看次数

SKStoreReviewController.requestReview() 不适用于 iOS 14

正如我在标题中所说,

[SKStoreReviewController requestReview];
Run Code Online (Sandbox Code Playgroud)

在 iOS 14 中不再工作了。有谁知道替代方案?

objective-c storekit ios ios14

0
推荐指数
1
解决办法
915
查看次数