如何validation您的服务器上的IOS应用内购买

我准备build立我的第一个应用程序内购买应用程序。 我想知道是否有一种方法来validation您的服务器上的购买。

我必须build立整个用户pipe理,我想知道所有注册用户他们已经在他们的iOS设备上买了什么,以便他们免费获得networking应用,或类似的东西。 那么,有没有办法让我检查一下苹果的商店,如果这个用户已经买了一些产品?

编辑:

情景是这样的:

用户在移动设备上购买应用程序B. 在此之后,我想检查我的服务器(在我的网页上,…),如果用户A是买了应用程序B,或(类似)哪个应用程序是由用户A买的。

我不想从移动设备发送消息到我的服务器,用户A购买应用程序B,因为即使用户没有购买应用程序B,用户也可以在服务器上重现此呼叫。

如果用户A购买了应用程序B,我将检查服务器端的惠普app store。

[[NSBundle mainBundle] appStoreReceiptURL] )获取应用程序的收据(将其发送到您的服务器)。 那么…

  • 按照此处所述 (在您的服务器上,而不是在应用程序中)parsing收据并检查其对苹果证书的签名。 要么,

  • 将收据(再次从您的服务器)发送到app store进行validation,如此处所述 。

我刚刚发布了一个简单的Python / Djangonetworking应用程序( 应用内购买收据validation器 ),可以自动处理这个过程中烦人的部分(即在维护密码完整性的同时validation服务器上的收据)。 代码本身是相对简单的,但我想其他人会感激不必在这里做咕噜工作。

要使用它,只要确保你有你的应用程序特定的共享秘密准备去,然后去这里 ,然后单击“部署到Heroku”。 您的应用程序将在一分钟内启动并运行。

我还包括了一些示例代码,以了解如何使用此Web应用程序validation您的应用程序中的收据。 使用Swift 4:

 guard let receiptURL = Bundle.main.appStoreReceiptURL, let data = try? Data(contentsOf: receiptURL) else { return } let encodedData = data.base64EncodedData(options: []) let url = URL(string: "https://your-app.herokuapp.com/verify")! var request = URLRequest(url: url) request.httpBody = encodedData request.httpMethod = "POST" let task = URLSession.shared.dataTask(with: request) { (data, response, error) in guard let data = data, let object = try? JSONSerialization.jsonObject(with: data, options: []), let json = object as? [String: Any] else { return } // Your application logic here. } task.resume() 

注意:还有其他解决scheme在StackOverflow上浮动,build议完全在应用程序本身进行validation,但我强烈build议不要这样做。 从“ 收据validation编程指南”中的 Apple文档:

使用受信任的服务器与App Store进行通信。 使用您自己的服务器,您可以devise应用程序来识别并信任您的服务器,并确保您的服务器与App Store服务器连接。 无法直接在用户设备和App Store之间build立可信连接,因为您不控制该连接的任何一端。

进一步的改进可能会在响应头文件中添加某种encryption签名,以便您的应用程序可以检查响应是否安全,但是我可能在将来的版本中添加该签名。 完成:)

为此,您可以使用以下内容:1.使服务器上的用户与购买状态一起input。 2.你也可以使用苹果公司提供的支付收据。

另外,如果您使用的是非消耗性产品,那么您只需要一个恢复button即可。 请为此查看苹果的文档。 https://developer.apple.com/in-app-purchase/