对于我的应用程序,我觉得它会要求确认和帐户进行应用内购买,但我不知道如何在购买完成后启用该项目.
SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.silver.tapp.page2"];
Run Code Online (Sandbox Code Playgroud)
[[SKPaymentQueue defaultQueue] addPayment:payment];
那就是我到目前为止所拥有的
[[p2Controller tabBarItem] setEnabled:TRUE];
Run Code Online (Sandbox Code Playgroud)
这是我想要执行的代码
我知道之前有人问过:iPhone In App Purchase - response.products仍然是空的?
但我也在尝试实施应用内购买和我的回复.产品是空的.我的情况:
我上传并拒绝了我的二进制文件一次
但后来我把状态恢复到等待再次上传.(这有关系吗?)
我所有的应用内购买产品的状态是"准备提交".
我的生产用户已退出.测试用户尚未登录.
-(void) requestProductData{
SKProductsRequest *productRequest= [[SKProductsRequest alloc]
initWithProductIdentifiers:[NSSet setWithObjects:
@"com.mydomain.myapp.Pack1",
@"com.mydomain.myapp.Pack2",
@"com.mydomain.myapp.Pack3",nil]];
productRequest.delegate = self;
[productRequest start];
}
-(void)productsRequest:(SKProductsRequest *)request
didReceiveResponse:(SKProductsResponse *)response{
NSArray *myProducts = response.products;
NSLog(@"%d",[myProducts count]);//this prints 0
for(SKProduct * product in myProducts) {
[products addObject:product];
}
[request autorelease];
}
in my viewdidload:
if([SKPaymentQueue canMakePayments]) {
NSLog(@"IN-APP:can make payments");
}
else {
NSLog(@"IN-APP:can't make payments");
}
/*load transaction history to see if the user already bought some …Run Code Online (Sandbox Code Playgroud) 我正在实施iPad游戏,并希望允许玩家购买额外的地图.我是否需要实施服务器并存储该购买以便我可以处理用户更改到其他设备或者StoreKit是否自动为不同的设备处理它?也就是说,如果用户使用他的用户名在设备A上购买了额外的地图,然后将游戏安装在具有相同用户名的新设备B上我是否需要做一些特别的事情,或者StoreKit是否会记住购买,这样他就不会收了两次?
我正在我的 iOS 项目中实现 Apple 兼容的恢复功能。现在我遇到了以下行为(至少在沙箱模式下,最终也在生产模式下):
这将恢复我的产品 X 和 Y,尽管我还没有使用 Testaccount B 进行任何购买。
Apple 是否以某种方式跟踪帐户/设备关联,或者为什么要恢复帐户未购买的项目?
我计划在用户使用该应用程序成功扫描QR码时为In App购买提供折扣.我知道没有办法为现有项目提供折扣.我计划以折扣价格添加另一件商品.任何人都有过像这样的方法的经验吗?
先感谢您
我想在 iTunes Connect 中为应用内购买定义一个新产品,但是我收到以下错误消息:
您输入的产品 ID 已被使用。输入唯一的产品 ID,然后重试。
这是否意味着每个 Apple ID 的产品 ID 必须是全球唯一的(我已经在另一个应用程序中使用了相同的产品 ID)?到目前为止,我的印象是每个应用程序具有本地唯一性就足够了。
我的应用程序启动并检查收据。因为它是沙盒,所以应用程序第一次从 Xcode 运行时,需要向 App Store 索要收据。所以我常常SKReceiptRefreshRequest要求它。
弹出一个窗口,要求提供 App Store 凭据。如果我输入凭据,那么应用程序会加载收据,我会对其进行验证,并且应用程序会正常运行。
如果我取消该凭证窗口,问题就会开始。
然后我遇到了第一个问题。目前该应用程序没有收据,因此我无法验证该副本是否为盗版。该怎么办?我尝试了以下方法:当用户尝试使用该应用程序时,我没有禁用该应用程序,而是显示一个窗口,显示“无法验证该应用程序,请输入“确定”立即验证”。
当用户输入“确定”时,我会SKReceiptRefreshRequest再次触发。再次弹出一个凭据窗口,我输入有效的凭据,但没有任何反应。两三分钟没有任何反应后,会弹出一个窗口,提示“无法连接到 App Store”。
奇怪的是,在此故障期间没有调用任何委托request:didFailWithError:方法requestDidFinish:。SKReceiptRefreshRequest收据检索失败,没有触发任何委托方法,是的,委托已分配。
收据检索的代码是传统的,即
SKReceiptRefreshRequest *refreshReceiptRequest = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
refreshReceiptRequest.delegate = self;
[refreshReceiptRequest start];
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
NSLog(@"ERROR");
}
- (void)requestDidFinish:(SKRequest *)request {
if([request isKindOfClass:[SKReceiptRefreshRequest class]])
{
NSLog(@"App Receipt exists after refresh");
} else {
NSLog(@"Receipt request done but there is no receipt");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个客户端/服务器应用程序,它使用 Apples IAP 和 StoreKit 框架来购买订阅。
我们希望客户端(iPhone 或 iPad)使用 StoreKit 框架通过他们的 iTunes 帐户与苹果进行初始订阅购买,然后将收据传递给我们的服务器,服务器将对其进行验证,然后更新用户帐户状态。我们还希望服务器负责管理订阅状态(检查自动续订、取消等)。这都是使用 iOS 7 风格的 appleReceipts,而不是目前已弃用的 iOS 6 风格的交易收据。
Apple 的文档说 POST 到以下 URL 以验证沙箱中的收据以及收据和密码
https://sandbox.itunes.apple.com/verifyReceipt
到目前为止..一切正常。
让我感到困惑的地方在于响应。Apple 的文档说响应最多应该有 4 个字段。如果您正在验证 iOS 7 风格的应用程序收据,那么您应该只看到前 2 个。如果它是 iOS 6 风格的订阅交易收据,那么您应该看到所有 4 个。
1) 状态(0 表示有效,否则为一些错误代码)
2) 收据(已发送收据的 JSON 表示)
3) latest_receipt(仅针对自动续订订阅的 iOS 6 样式交易收据返回。最近续订的 base-64 编码交易收据。)
4)latest_receipt_info(JSON格式同上)
问题 1: 即使我正在验证 iOS 7 风格的应用收据,我也看到了所有 4 个。文档说这不应该发生。
问题 2:
我们希望服务器通过使用客户端在初始购买后通过的原始应用收据轮询此 API 来处理维护用户订阅状态。该latest_receipt_info字段似乎确实包含一个不断更新的交易列表,而该receipt字段是原始的副本,没有更新的交易信息。
我的问题:
似乎服务器获取有关更新事务的信息的唯一方法是查看latest_receipt_info或latest_receipt …
在我们的应用程序中,我们支持四种类型的订阅:
我们将这些订阅分为以下两个系列:
单用户订阅
家庭用户订阅
我们有一些查询来了解自动更新流程,我列出了:
用户可以在iTunes Manage Subscription/from Application中切换自动续订产品系列吗?
假设我购买单用户每月订阅,现在我想切换到家庭用户每月订阅.
当我尝试更改订阅时,iTunes管理订阅将显示哪些选项意味着它显示订阅系列或仅显示我当前订阅的系列?
如果我购买这些不同的家庭订阅,Apple会在当时收费还是会在当前订阅到期后收取费用?
假设我购买了Family User Yearly Subscription,现在我想切换到Family User Monthly Subscription.
我是否可以购买"家庭用户每月订阅",因为我已经订阅了"家庭用户年度订阅"的同一家庭订阅?
当我从iTunes管理订阅更改这些订阅时,新订阅将在当前订阅到期时开始,并将在当时从新订阅收费.我对Apple订阅流程是否正确?
我们是否通过在我们的应用程序中管理两个自动续订系列而违反任何Apple政策?
应用内购买对于我的 iOS 方面来说效果很好。StoreKit 中的数据已按原样填充。相同的代码不适用于该项目的 Mac Catalyst 版本。我什至在 App Store 上为我的 Mac 应用程序创建了一个列表,其中包含用于应用程序内购买的不同捆绑标识符。我有一个打印功能,可以返回 StoreKit 找到的产品,它在 iOS 上运行良好,但在使用 Mac Catalyst 时没有任何结果。
这是我所做的:
适用于 iOS 但不适用于 MacOS 的代码:
override func viewDidLoad() {
SKPaymentQueue.default().add(self)
let productIds: Set<String> = ["..."]
var request = SKProductsRequest(productIdentifiers: productIds)
request.delegate = self
request.start()
}
func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
print("Loaded")
for product in response.products {
print("What came: \(product.productIdentifier) \(product.localizedTitle) \(product.price.floatValue)")}
Run Code Online (Sandbox Code Playgroud)
iOS 应用程序将返回产品标识符、标题和价格。Mac 应用程序将一无所获。