标签: storekit

iPhone In App Purchase - response.products仍然是空的?

基本上,我尝试在测试应用程序中设置应用程序购买,然后再将其应用到我公司正在开发的应用程序中.我已经阅读了商店套件pdf和其他片段大约1000次,但产品仍然是空的.这正是我到目前为止所做的:

设置测试应用程序和In App Purchase测试项目
我在iPhone开发人员中心的公司开发人员门户上为"Test App One"创建了一个新的应用程序ID.我确保前缀是com.mycompany.testappone确保可以配置应用内购买.保持应用ID部分,我通过勾选"启用应用内购买"选项配置应用购买.

我在iTunes Connect中创建了"Test App One",并完成了常规程序,但选择了"稍后上传二进制文件"并且没有提交审核,因为该应用程序什么都不做.当然,我们不必提交应用程序来审查这个工作?!然后,我点击管理应用内购买并创建一个新产品ID为"test1"并批准它以便清除销售.

代码
我在XCode中设置了一个新项目TestAppOne,这里是我现在使用的唯一两个类:

TestAppOneAppDelegate.h:

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

@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
    UIWindow *window;
}
Run Code Online (Sandbox Code Playgroud)

TestAppOneDelegate.m:

#import "TestAppOneAppDelegate.h"

static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1";

@implementation TestAppOneAppDelegate
@synthesize window;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
 if([SKPaymentQueue canMakePayments]) {
  NSLog(@"IN-APP:can make payments");
 }
 else {
  NSLog(@"IN-APP:can't make payments");
 }

 [self requestProductData];
 [window makeKeyAndVisible]; 
}

- (void)requestProductData {
 NSLog(@"IN-APP:requestProductData");
 SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]];
 request.delegate …
Run Code Online (Sandbox Code Playgroud)

iphone storekit in-app-purchase iphone-sdk-3.0

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

iOS Sandbox测试用户帐户订阅管理

我目前正在尝试将IAP添加到现有应用程序中.为此,我添加了一些产品并创建了一些测试用户.这些产品是定期订阅.我正在测试的设备是带有iOS 5.1的iPhone 4S.

我可以成功地在商店中查询我的产品,并成功购买了我的新测试用户.我遇到的问题是,如果我尝试从商店设置应用程序管理我的订阅,它会强制我通过告诉我"此帐户尚未用于在AppStore中购买任何内容来审核我的帐户,请检查您的帐户并继续".如果我查看该帐户,它将不会让我继续提供信用卡信息.

最终结果是我永远无法取消我的测试订阅.我删除了测试用户并创建了新用户,删除了应用程序并重新安装了它,杀死了StoreApp和设置应用程序,重新启动了设备,在购买之前通过电子邮件验证了帐户,在购买之前没有通过电子邮件验证帐户...所有排列似乎失败了.

有时我会两次购买相同的订阅,这会促使StoreKit要求我管理我的订阅设置.有时这会导致之前的"帐户审核"过程,有时会导致"无法连接到iTunes Store"的警报.

我已经完成了如何继续的想法.

编辑 - 这是我创建的任何iTunesConnect测试用户的事件流

初步认购
初步认购

使用现有ID
使用现有ID

测试帐户登录
测试帐户登录

管理订阅
管理订阅

AppStore登录
AppStore登录

无法连接到AppStore
无法连接

检查您的帐户
评论

然后,审查过程迫使我输入CreditCard Info,即使它的地址为"1 Infinite Loop Cupertino,CA"(即它知道这是一个测试帐户).

testing itunesconnect app-store storekit ios

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

验证在App购买中的收据

我一直在玩应用程序购买几天,一切正常,直到我尝试通过应用程序商店验证收据,因为我经常回到无效状态.

我将收据数据传递给我的PHP服务器,然后从那里转发到应用商店,一旦得到有效的响应,我打算将收据数据添加到我的数据库.

商店套件编程指南和类引用对于这个特定区域来说并不是没用,因为它们并没有真正给你任何类型的例子,我确实找到了一篇有用的文章,它帮了我一点但有些东西仍然是错误的.

基本上我想知道是否有工作收据验证的人愿意分享他们的代码,因为我无处可去.

谢谢

php iphone objective-c storekit in-app-purchase

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

iOS:如何检测用户是否订阅了可自动更新的订阅

希望标题是不言自明的.我正在尝试做这样的事情:

checkIfUserIsSubscribedToProduct(productID, transactionID: "some-unique-transaction-string", completion: { error, status in
    if error == nil {
        if status ==  .Subscribed {
            // do something fun
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

做了类似我提供的假设代码吗?我觉得我正在服用疯狂的药片

编辑

在类似的问题中,我一直看到一个通用的答案"哦,你必须验证收据"但没有解释如何,甚至收据是什么.有人可以向我提供如何"验证收据"吗?我试过这个教程,但似乎没有用.

编辑 - 为赏金

请解决以下情况:用户订阅我的自动续订订阅并因此获得更多数字内容 - 很酷,实施.但是,如何在每次打开应用程序时检查该订阅是否仍然有效(即他们没有取消订阅)?检查这个的最简单的解决方案是什么?有没有像我在问题中提供的假设代码?请引导我完成此操作并提供有关该主题的任何进一步详细信息.

storekit ios swift

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

iPhone StoreKit - 无效的产品ID

我正在尝试在沙箱环境中测试In App Purchase.

为了测试代码,我做了以下事情:

  1. 在iTunes Connect中的"管理用户"下创建了一个应用内购买测试用户帐户

  2. 在"管理您的应用内购买"下创建了一些应用内购买产品.我使用了产品ID的数值和字母数字值.

  3. 将应用程序加载到iPhone上,转到设置 - >存储并退出常规存储并进入步骤1中创建的测试帐户

  4. 在(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 回调中)设置断点

所有提交的产品ID都在response.invalidProductIdentifiers酒店内.提交请求时,我首先尝试了在步骤2中创建的确切产品ID.我还尝试使用Bundle ID为它们添加前缀:

NSString *id2 = @"com.super.duper.8";
NSSet *productList = [NSSet setWithObjects:id2, @"8", nil];

SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productList];
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 任何帮助表示赞赏.

阿希姆

iphone storekit iphone-sdk-3.0

33
推荐指数
5
解决办法
3万
查看次数

iOS沙箱环境自动续订订阅

关于iOS自动续订订阅,我有以下问题

a)自动续订订阅是否真的在沙箱环境中自动续订?问题似乎是订阅不会自动更新,尽管文档说即使在沙盒环境中它也应该发生6次.

b)我们是否需要调用restoreCompletedTransactions来获取自动扩展订阅的新收据,或者是-paymentQueue:updatedTransactions:iOS自动调用的方法?(我猜它会自动调用'启动'和'旋转出背景'不确定)

c)您如何在多个设备上处理相同的订阅?这可以通过restoreCompletedTransactions来处理,但是调用它会提示用户输入密码,因此每次启动应用程序时调用它都不是很方便.

iphone storekit in-app-purchase auto-renewing

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

如何检测并验证自动续订订阅的续订?

所以我为我的应用设置了一个可自动更新的订阅,期限为1个月,相当于沙盒中的5分钟左右.在我订阅的客户端应用程序中,将收据发送到我的服务器,它得到验证,我在我的数据库中记录了该用户订阅的记录.

我的问题是如何检查此订阅是否已续订?我已经阅读了文档,无法弄清楚我应该怎么做.

这是我到目前为止的地方:

  1. 发送到我的服务器的初始收据已通过状态验证0,非常好.我也得到了latest_receipt,我用我最早的收据替换了我的数据库.
  2. 6分钟后,当我尝试验证时latest_receipt,我获得状态21006(已过期的收据),并且:
   { receipt: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '------------',
         original_transaction_id: '----------',
         expires_date: '1376129825000',
         transaction_id: '------------',
         quantity: '1',
         product_id: 'subscription',
         item_id: '--------',
         bid: 'com.--------',
         unique_vendor_identifier: '---------',
         web_order_line_item_id: '---------',
         bvrs: '2.0',
         expires_date_formatted: '2013-08-10 10:17:05 Etc/GMT',
         purchase_date: '2013-08-10 10:12:05 Etc/GMT',
         purchase_date_ms: '1376129525000',
         expires_date_formatted_pst: '2013-08-10 03:17:05 America/Los_Angeles',
         purchase_date_pst: '2013-08-10 03:12:05 America/Los_Angeles',
         original_purchase_date: '2013-08-06 18:58:04 Etc/GMT',
         original_purchase_date_ms: '1375815484000' },
      latest_expired_receipt_info: 
       { original_purchase_date_pst: '2013-08-06 11:58:04 America/Los_Angeles',
         unique_identifier: '-------',
         original_transaction_id: '-',
         expires_date: '1376129825000',
         transaction_id: …
Run Code Online (Sandbox Code Playgroud)

itunesconnect app-store storekit in-app-purchase ios

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

(iOS + StoreKit)我可以检测到我在沙箱中的时间吗?

我的应用内购买工作得很好,我正在进行服务器验证路线.服务器需要知道我是否在沙盒中,所以现在我只是发送一个"&sandbox = 1"参数.当然,当应用程序的完整版本出来时,我将不会发送此参数.

我宁愿不在我的应用程序中使用这个硬编码,因为这将使测试在将来变得困难,并且在向Apple提交构建之前记住更改是一件大事.

有没有办法我可以问StoreKit我是否在沙盒中,这样我就可以确定是否需要将此参数发送到我的服务器?或者,是否有其他最佳实践来处理服务器验证?

考虑到这一点,我应该首先让服务器先检查实时系统,然后再检查沙箱?如果在实时和沙箱系统之间隔离苹果ID,那么它不会造成任何伤害吗?

谢谢.

storekit in-app-purchase ios

25
推荐指数
3
解决办法
1万
查看次数

刷新iOS应用收据:如何确定用户是否需要登录应用商店?

我正在iOS 7上实施Apple的"Grand统一收据",允许该应用程序在本地检查应用程序的购买收据,而无需联系Apple的服务器进行验证和验证.如果用户在应用程序中存储了收据,则此方法很有用.如果应用程序缺少收据,最佳做法是请求应用程序刷新收据,如下:

    SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init];
    [request setDelegate:self];
    [request start];
Run Code Online (Sandbox Code Playgroud)

问题是调用此代码将要求用户使用他或她的Apple ID登录.如果这种情况一直发生,或者只有当用户的应用程序商店登录超时时,我并不是100%确定.除非确实有必要,否则我不想向用户显示Apple ID登录屏幕 - 我不希望人们担心他们会被错误地收费.我想显示一个显示屏,告诉用户为什么会要求他们提供Apple ID密码,但前提是他们确实需要输入密码.如果他们不需要输入密码,我希望它是一个无缝且隐藏的过程.什么是最好的方法?我认为最好的方法是检查用户是否需要登录应用程序商店,但我不确定这是否可行.

iphone app-store storekit ios apple-id

24
推荐指数
3
解决办法
1万
查看次数

使用单一产品在Swift中进行应用内购买

是否有一种简单的方法可以在swift中为单个产品实施应用内购买?

我想要一个触发应用内购买的按钮,例如[广告删除]或[解锁高级内容]

我无法理解它的全部逻辑.

我正在尝试从[Techotopia] http://www.techotopia.com/index.php/An_iOS_7_In-App_Purchase_Tutorial关注和翻译本教程

但这是我第一次使用StoreKit Framework,还有Swift.

我只是想知道使用Swift StoreKit Framework的应用程序内购买交易的逻辑.

谢谢!

storekit in-app-purchase ios swift

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