タイトルが自明であることを願っています。私はこのようなことをしようとしています:
checkIfUserIsSubscribedToProduct(productID, transactionID: "some-unique-transaction-string", completion: { error, status in
if error == nil {
if status == .Subscribed {
// do something fun
}
}
}
私が提供した仮想コードのようなものは存在しますか?クレイジーピルを服用しているように感じます
編集
同様の質問で、「レシートを検証する必要があります」という一般的な回答が表示され続けますが、レシートがどのように、または何であるかについての説明もありません。誰かが「領収書を検証する」方法を教えてもらえますか? このチュートリアル を試しましたが、うまくいかないようです。
編集-バウンティ用
次の状況に対処してください。ユーザーが自動更新可能なサブスクリプションにサブスクライブし、そのためにより多くのデジタルコンテンツを取得する-クールで実装済み。しかし、アプリを開くたびに、そのサブスクリプションがまだ有効である(つまり、サブスクリプションをキャンセルしなかった)かどうかを確認するにはどうすればよいですか? これを確認する最も簡単な解決策は何ですか?私の質問で提供した仮想コードのようなものはありますか?これについて説明し、役立つ可能性のある主題に関する詳細を入力してください。
誰もが私と私がこれについてどのようにやっているのかを非常に心配していたことを知っています-恐れないで、私の問題を解決しました。主な問題は、私が このリンクのゴミと古くなったコード を試したことですが、機能していなかったため、あきらめました。それから私はそれに戻り、Alamofire
で実装しました。コードソリューションは次のとおりです。
Swift 3:
let receiptURL = Bundle.main.appStoreReceiptURL
let receipt = NSData(contentsOf: receiptURL!)
let requestContents: [String: Any] = [
"receipt-data": receipt!.base64EncodedString(options: []),
"password": "your iTunes Connect shared secret"
]
let appleServer = receiptURL?.lastPathComponent == "sandboxReceipt" ? "sandbox" : "buy"
let stringURL = "https://\(appleServer).iTunes.Apple.com/verifyReceipt"
print("Loading user receipt: \(stringURL)...")
Alamofire.request(stringURL, method: .post, parameters: requestContents, encoding: JSONEncoding.default)
.responseJSON { response in
if let value = response.result.value as? NSDictionary {
print(value)
} else {
print("Receiving receipt from App Store failed: \(response.result)")
}
}
特に何を達成しようとしていますか?特定のApple IDを確認しますか?
これがSDKを介して可能であることを非常に疑います。 ユーザーのApple IDを取得できますか? を参照すると、IDを直接要求することもできず、それ。
動作するのは、すべてのトランザクションを自分のサーバーにキャッシュし、そのデータベースをローカルで検索することですが、アプリがユーザーのApple IDを要求するため、アプリが起動するたびにサブスクリプションの状態を更新できるようになりますデバイスに関連付けられているIDのIAPを確認できます。
ただし、ユーザーは自分が望むものを何でも入力することができます-Appleのアプリレビュープロセスでこれを取得することはほとんどありません。
私はMKSoreKitを使用しています https://github.com/MugunthKumar/MKStoreKit サブスクリプションの自動更新に使用しますが、Objective Cではソリューションのライブラリコードを確認できます。コードで使用していますそしてそれはうまく機能しています。
以下の方法を使用すると、サブスクリプションのステータスを簡単に確認できます。
if([MKStoreManager isProductPurchased:productIdentifier]) {
//unlock it
}
デバイスからApple idを取得します。これはユーザー固有のものだと思います
いくつかのコメントが指摘したように、これらの回答にはいくつかの欠陥があります。
/verifyReceipt
を呼び出すことは安全ではありません。受信確認を処理するためにサーバーをセットアップする方法に関する他のチュートリアルがいくつかありますが、これは問題の一部にすぎません。アプリを起動するたびに開封して領収書を検証するネットワークリクエストを行うと問題が発生する可能性があるため、スムーズに実行するにはキャッシュも必要です。
RevenueCat SDK は、このためのすぐに使える優れたソリューションを提供します。
このアプローチが好きな理由はいくつかあります:
この質問にはさらに詳細があります: https://stackoverflow.com/a/55404121/3166209
それが機能するのは、必要に応じて何度でも呼び出すことができ、ほとんどの場合に同期的に返される単純な関数です(キャッシュされているため)。
subscriptionStatus { (subscribed) in
if subscribed {
// Show that great pro content
}
}