标签: storekit

使用Google Analytics iOS SDK进行应用内购买跟踪

我想按照其电子商务跟踪指南中的说明,使用Google Analytics SDK for iOS v2跟踪应用内购买情况.

我在收到SKPaymentTransactionStatePurchased事务更新后正在执行以下操作:

- (void) trackTransaction:(SKPaymentTransaction*)transaction
{
    NSString *transactionIdentifier = transaction.transactionIdentifier;
    GAITransaction *gaiTransaction = [GAITransaction transactionWithId:transactionIdentifier withAffiliation:@"App Store"];

    SKPayment *payment = transaction.payment;
    NSString *productIdentifier = payment.productIdentifier;
    SKProduct *product = [self productForIdentifier:productIdentifier];
    NSString *productTitle = product.localizedTitle;
    int64_t priceInMicros = product.price.floatValue * 1000000; // FIXME: Doesn't consider different currencies
    [gaiTransaction addItemWithCode:productIdentifier name:productTitle category:nil priceMicros:priceInMicros quantity:payment.quantity];

    gaiTransaction.revenueMicros = priceInMicros * payment.quantity; // FIXME: doesn't consider Apple's cut

    id<GAITracker> tracker = [GAI sharedInstance].defaultTracker;
    [tracker trackTransaction:gaiTransaction];
} …
Run Code Online (Sandbox Code Playgroud)

iphone google-analytics storekit in-app-purchase ios

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

不续订订阅:从收据中删除?

我正在为我的应用实施应用内购买(即将发布),并为iOS6和iOS7提供支持.我的问题与iOS6和iOS7上的非续订订阅机制之间的差异有关,更具体地说,关于如何实现恢复.为了适应iOS6和iOS7,我实现了一个服务器端解决方案来启用恢复.我可以选择允许用户创建可以在不同设备上使用的用户名/密码(如果数据丢失,则使用同一设备)进行恢复.我的大部分工作基本上都在工作,但随着我的测试进展,我发现了一些奇怪的东西.

iOS7恢复过程的初始部分使用SKReceiptRefreshRequest刷新应用程序中的收据.当我从iOS7设备上删除应用程序时,重新安装(此时没有收据;使用iExplorer进行测试),并进行恢复,SKReceiptRefreshRequest恢复10次购买(我在测试期间为此特定用户创建) .其中一个是非消耗品,其中九个不续订.这让我很困惑.从Apple文档中,我预计只会在刷新的收据中看到非消费品购买.来自https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html:

"消耗品和非更新订阅:在购买时,消费品或非续订订购的应用内购买收据会添加到收据中.它会保留在收据中,直到您的应用完成该交易.在此之后,下次更新收据时会将其从收据中删除 - 例如,当用户再次购买时,或者您的应用明确刷新收据时.

与非续订订阅有关,请访问https://developer.apple.com/in-app-purchase/In-App-Purchase-Guidelines.pdf:

使用iCloud或您自己的服务器跟踪购买情况,并允许用户将购买的订阅恢复到单个用户拥有的所有iOS设备

以及下表(https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Products.html)

在此输入图像描述

有人有任何见解吗?

问题:为什么SKReceiptRefreshRequest会在收据中留下非续订产品的购买?这是Apple文档中的错误还是还有其他事情发生?

14年2月23日; 更新:我最近在Apple上发布了一个错误报告.还没回来.虽然,实际上,我不希望这个"虫子"消失!

15年10月20日; 更新:似乎Apple实际上已经解决了这个"错误".现在,当我使用恢复时SKReceiptRefreshRequest(这似乎是Apple推荐的恢复方法,请参阅https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html) ,我现在没有在收据中显示未续订的订阅购买.我只收到非消耗品(我的应用程序只有非续订订阅和非消耗品购买).在我写完这篇文章后,我会立即向Apple提交一份错误报告,他们的文档对预期的行为不明确.

到目前为止,我对此测试的测试包括我在iOS 8.4和iOS9上运行的应用程序(实际上因为我没有正确的设备运行生产版本,因此测试版为9.1 beta),因此看起来这是Apple的服务器端更改而不是严格说iOS /设备方改变.另请注意,到目前为止,我的所有测试都是在我的应用程序的开发版本中,因此在应用内购买沙箱中也是如此.我很快就会进行生产测试.

15年12月3日; 更新; 在Apple技术支持的提示下,我又进行了一些测试.这一次,在运行iOS9.2 beta 4(13C75)的iPad上.现在看来我们已经恢复"正常",不续订订阅.也就是说,当我进行恢复时,我再次看到收据中未续订的订阅.

restore storekit ios7 non-renewing-subscription

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

应用程序应该如何应对延迟的SKPaymentTransaction?

我在我的应用程序中进行了应用程序内购买,iOS 8中的新增内容是"延期"交易,部分在技术说明中描述

我理解它的作用,我需要不阻止UI,并更新我的UI以反映事务状态是延迟的.但是,我应该在-(void)transactionDeferred:(SKPaymentTransaction *)transaction暂时忽略交易的方法中放置什么呢?

我只更新了用户界面吗?UI的内容应该是什么?我是否需要用"您的购买延期"等替换价格标签?我认为没有办法测试这个,至少我没有看到任何与我的沙箱测试帐户有关的事情.如果有办法完成整个过程,看看它是如何工作的,那对我来说会更有意义.

storekit in-app-purchase ios

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

iOS中In app购买的服务器端验证的最佳实践

我们正在使用付款的服务器端验证,如此 -

  1. 用户付款.
  2. Store kit API将交易收据发送给App.
  3. 应用程序将base64编码的事务收据发送到我们的服
  4. 我们的服务器调用https://buy.itunes.apple.com/verifyReceipt并验证事务接收器.
  5. 用户被标记为已付款.

对于特定用户,我们未在服务器上获得交易收据,因此无法验证收据.我们猜测在步骤2和3中出现了问题.如果在向服务器发送收据时出现连接问题,应用程序将在后续应用程序恢复时重试.

现在我们有一个丢失的交易收据和愤怒的用户.你怎么建议我们前进?我们怎样才能防止这种情况发生?我们可以遵循哪些指导方针或最佳做法来防止这种情况发生?

谢谢.

payment transactions storekit in-app-purchase ios

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

无法在付款队列中完成未完成的交易

我的应用程序在IAP沙箱中进入了一些奇怪的状态...每次启动应用程序时都会询问特定测试用户的密码.我想由于未完成的交易.我真的想完成那笔交易,但这是不可能的.一些背景信息以及我为它做了些什么:

  • 我从itunesconnect删除了该测试用户
  • 一旦应用程序启动我就打电话 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]
  • 输入该特定测试用户的密码或点击取消后,未收到任何支付队列更新通知
  • [SKPaymentQueue defaultQueue].transactions.count总是0如此,所以我无法手动完成未完成的交易
  • 我从设备中删除应用程序,重新启动设备 - 仍然要求输入密码
  • 我正在从设置 - > iTunes和App Store注销用户
  • 取消对话框询问密码后,我可以用另一个测试用户登录,但下次我仍然得到旧测试用户密码的对话框.

唯一的问题是改变包ID,这在我的情况下是不可取的.希望有人知道如何摆脱未完成的交易的替代方法.

storekit in-app-purchase ios

12
推荐指数
2
解决办法
4262
查看次数

使用Swift取消自动续订订阅

我想创建一个按钮,用户可以取消自动续订订阅(或重定向到App Store).
如果没有用户必须首先完成整个购买过程,这是否可能?如果是的话,你会怎么做呢?
对此事的任何想法将不胜感激!!

renewal storekit in-app-purchase ios swift

12
推荐指数
2
解决办法
6627
查看次数

AppStore.sync() 不恢复购买

在使用旧 API 进行应用内购买的应用程序 ( StoreKit 1 ) 上。该应用程序已在 App Store 上发布。购买的是非消耗品

在尝试迁移到StoreKit 2时,我无法恢复购买。具体显示和购买产品按预期工作,但是当删除并重新安装应用程序,然后尝试恢复购买时,我无法做到这一点。

我正在尝试使用新的 API 来恢复它们,但它似乎不起作用。到目前为止我已经尝试过:

我在应用程序的整个生命周期中监听交易更新,其中:

Task.detached {
    for await result in Transaction.updates {
        if case let .verified(safe) = result {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个调用此方法的按钮,但除了提示使用 Apple ID 再次登录之外,它似乎根本没有任何效果:

try? await AppStore.sync()
Run Code Online (Sandbox Code Playgroud)

这不会返回任何项目

for await result in Transaction.currentEntitlements {
    if case let .verified(transaction) = result {

    }
}
Run Code Online (Sandbox Code Playgroud)

这不会返回任何项目

for await result in Transaction.all {
    if case let .verified(transaction) = result {

    }
}
Run Code Online (Sandbox Code Playgroud)

如前所述,我在购买该商品并删除该应用程序后尝试此操作。所以我确信它应该能够恢复购买。我在模拟器上使用Configuration.storekit …

macos storekit in-app-purchase ios swift

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

StoreKit返回所有产品ID

这个问题与我在这里找到的其他问题略有不同.My In App StoreKit正在运行,我可以成功地在我的商店中列出产品.我已经浏览了Apple文档,从未看到我的问题(我可能已经错过了).

我的客户(非营利组织)希望能够通过他们的应用程序接受捐款.我想让他们能够动态添加新的捐赠活动,而无需用户更新他们的应用程序.我的意思是,他们可能有一个特殊的"帮助我们赞助即将到来的植树节活动",并接受特定于该案例的捐款.

我目前正在阅读这样的产品:

SKProductsRequest *request= 
         [[SKProductsRequest alloc] initWithProductIdentifiers: 
          [NSSet setWithObjects: @"goldSponsor", @"silverSponsor"];
Run Code Online (Sandbox Code Playgroud)

这意味着如果Arbor Day活动出现,我将不得不发布更新以在我的请求列表中包含@"arborSponsor".如何申请捆绑下的每件产品?

我尝试过使用@"com.thedomain.*"和其他一些没有运气的猜测.有可能返回整个列表,我错过了一些非常简单的东西吗?谢谢!

iphone storekit

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

app无法与SKStoreProductViewController一起安装

使用以下代码,SKStoreProductViewController可以显示应用程序的描述.

当我触摸"免费"按钮时,它会显示"安装应用".然后我触摸"安装应用程序",进度条显示在应用程序图标内.但是,进度条会在2-3秒内消失,应用程序仍会被卸载.

这是我的演示应用程序.有谁知道原因?

SKStoreProductViewController *skvc = [[SKStoreProductViewController new] autorelease];
skvc.delegate = self;
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"425349261" forKey:SKStoreProductParameterITunesItemIdentifier];
[skvc loadProductWithParameters:dict completionBlock:nil];
[self presentViewController:skvc animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

iphone objective-c storekit ios6

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

iOS自动续订订阅:测试沙箱上的升级无法正常工作

我正在iOS应用程序中进行自动更新订阅IAP.我打算在同一个订阅组中有3个不同的层.在我的测试中,我已经能够成功购买订阅,看到它在沙箱上更新了几次,然后在5或6次尝试后停止.这部分工作正常.但我想尝试从应用程序从一个层升级到更高层.这一次,当我尝试将带有新(升级)productID的SKPayment添加到支付队列时,我首先收到警告"你想要修改你的订阅......",然后我点击继续,我得到一个确认消息,但我也收到SKPaymentQueue: updatedTransactions状态失败的回调.错误说:

"失败的事务错误=错误域= SKErrorDomain代码= 0"无法连接到iTunes Store"UserInfo = {NSLocalizedDescription =无法连接到iTunes Store}

任何想法为什么会发生这种情况,以及是否甚至可以从沙箱测试订阅组更新?如果没有,那你将如何进行测试呢?

storekit in-app-purchase ios skpaymenttransaction

11
推荐指数
0
解决办法
565
查看次数