web-dev-qa-db-ja.com

サーバーでiOSアプリ内購入を確認する方法

最初のアプリ内購入アプリを作成します。サーバーで購入を確認する方法があるかどうか知りたいのですが。

ユーザー管理全体を構築する必要があります。登録済みのすべてのユーザーがiOSデバイスですでに購入したものを知り、無料でWebアプリを入手できるようにしたいと思っています。だから、私がAppleストア側で、このユーザーがすでに何かの製品を購入している場合)を確認する方法はありますか?

編集:

シナリオは次のとおりです。

ユーザーAがモバイルデバイスでアプリBを購入します。この後、ユーザーAがアプリBを購入したかどうか、または(同様の)ユーザーAがどのアプリを購入したかをサーバー(Webページなど)で確認します。

ユーザーAがアプリBを購入するというメッセージをモバイルデバイスからサーバーに送信したくないのは、ユーザーがアプリBを購入しなかった場合でも、サーバーでこの通話を再現できるためです。

ユーザーAがアプリBを購入したかどうかをサーバー側のアプリストアで確認します。

23
Marko Zadravec

アプリの領収書を([[NSBundle mainBundle] appStoreReceiptURL]にあるファイルから)取得し、サーバーに送信します。それから…

  • 領収書を解析し、その署名をAppleの証明書と照合します ここで説明されているように (アプリではなくサーバー上)。または、

  • 確認のために(ここでも、サーバーから)レシートをアプリストアに送信します ここで説明

27
s4y

このプロセスの煩わしい部分を自動的に処理する簡単なPython/Django Webアプリ( In-App Purchase Receipt Verifier )をリリースしました(つまり、暗号化の整合性を維持しながらサーバーで受信します)。コード自体は比較的単純ですが、ここでは面倒な作業を行う必要がないことを他の人が評価すると思います。

これを使用するには、アプリ固有の共有シークレットが準備できていることを確認し、 こちら に移動して、[Herokuにデプロイ]をクリックします。アプリは1分以内に稼働します。

このWebアプリを使用してアプリ内で領収書を検証する方法のサンプルコードも含めました。 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()

注:アプリ自体の中で完全に検証を行うことを提案するStackOverflowに浮かぶ他のソリューションがありますが、それはお勧めしません。 Appleのドキュメント( Receipt Validation Programming Guide )から:

信頼されたサーバーを使用してApp Storeと通信します。独自のサーバーを使用すると、サーバーのみを認識して信頼するようにアプリを設計でき、サーバーが確実にApp Storeサーバーに接続できるようになります。ユーザーのデバイスとApp Storeの間に信頼できる接続を直接構築することはできません。その接続のどちらの側も制御できないためです。

アプリが応答が安全かどうかを確認できるように、応答ヘッダー内にある種の暗号署名を追加するためにさらに改善を加えることができますが、今後のリリースで追加する可能性があります。 完了:)

3
Dan Loewenherz

サーバーは、Http PostによってApp Storeで受領を確認できます。参照してください https://developer.Apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html

1
Jin Tan

これには、次のものを使用できます。1.サーバー上のユーザーのエントリと購入ステータスを作成します。 2.また、Appleが提供する支払いレシートをストアキットを使用して使用することもできます。

また、非消耗品を使用している場合は、このための復元ボタンが必要です。これについてはAppleのドキュメントをご覧ください。 https://developer.Apple.com/in-app-purchase/

0
Ashutosh