質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

解決済

Xcode Apple審査のリジェクト(課金のレシート検証?)修正について

y_programming
y_programming

総合スコア0

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

1回答

0評価

0クリップ

47閲覧

投稿2020/11/20 06:22

こんにちは。
Xcodeでの課金部分でAppleの審査が通らず困っております。ご助言いただければ幸いです。
いずれもソフトは最新バージョンです。
以下引用の通りAppleより2度リジェクトされております。
なんとなくレシートがSandbox用なのにProductサーバーに送っちゃってるからどこかで条件分岐しろみたいなことだと理解しているんですが、コードのどこでどう分岐してどう記述すれば良いのかわかりません。
そもそも自身の環境では、SandboxでもTestFlight環境でもうまく動作するため、よくわからずにいます。
ネット上では課金部分のコードサンプルが少なく、ここ数日困っています。
よろしくお願いいたします。

We found that your in-app purchase products exhibited one or more bugs when reviewed on iPad running iOS 14.0 on Wi-Fi.

We were still unable to purchase your in-app purchase products because nothing occurred after tapped action buttons.

Next Steps

When validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead.

Swift

import UIKit import SwiftyStoreKit import Firebase class BillingViewController: UIViewController { @IBOutlet weak var pointLabel: UILabel! var userPoint = Int() let userid = Auth.auth().currentUser?.uid let indicator = UIActivityIndicatorView() @IBOutlet weak var buy500PointButton: UIButton! @IBOutlet weak var buy1000PointButton: UIButton! @IBOutlet weak var buy1500PointButton: UIButton! @IBOutlet weak var buy2000PointButton: UIButton! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } func purchase(PRODUCT_ID:String,POINT:Int){ SwiftyStoreKit.purchaseProduct(PRODUCT_ID) { (result) in self.indicator.stopAnimating() // ボタンを元の状態に戻す self.changeButton() switch result{ case .success(_): // 購入成功 // 購入検証 self.verifyPurchase(PRODUCT_ID: PRODUCT_ID,POINT: POINT) break case .error(let error): // 購入失敗 print(error) break } } } func verifyPurchase(PRODUCT_ID:String,POINT:Int){ let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "aaaaaaaaaaaaaaaaaaaaa") SwiftyStoreKit.verifyReceipt(using: appleValidator) { (result) in switch result{ case .success(let receipt): let purchaseResult = SwiftyStoreKit.verifyPurchase(productId: PRODUCT_ID, inReceipt: receipt) switch purchaseResult { // リストア成功 // 購入があったときの処理を記載 case .purchased: self.updateUserPoint(point: POINT) break case .notPurchased: break } break case .error(error: let error): print(error) } } } @IBAction func buy500PointAction(_ sender: Any) { buy500PointButton.isEnabled = false buy500PointButton.backgroundColor = .gray buy500PointButton.alpha = 0.5 purchase(PRODUCT_ID: "500point",POINT: 500) } @IBAction func buy1000PointAction(_ sender: Any) { buy1000PointButton.isEnabled = false buy1000PointButton.backgroundColor = .gray buy1000PointButton.alpha = 0.5 purchase(PRODUCT_ID: "1000point",POINT: 1000) } @IBAction func buy1500PointAction(_ sender: Any) { buy1500PointButton.isEnabled = false buy1500PointButton.backgroundColor = .gray buy1500PointButton.alpha = 0.5 purchase(PRODUCT_ID: "1500point",POINT: 1500) } @IBAction func buy2000PointAction(_ sender: Any) { buy2000PointButton.isEnabled = false buy2000PointButton.backgroundColor = .gray buy2000PointButton.alpha = 0.5 purchase(PRODUCT_ID: "2000point",POINT: 2000) } func changeButton(){ buy500PointButton.isEnabled = true buy500PointButton.backgroundColor = .systemPink buy500PointButton.alpha = 1 buy1000PointButton.isEnabled = true buy1000PointButton.backgroundColor = .systemPink buy1000PointButton.alpha = 1 buy1500PointButton.isEnabled = true buy1500PointButton.backgroundColor = .systemPink buy1500PointButton.alpha = 1 buy2000PointButton.isEnabled = true buy2000PointButton.backgroundColor = .systemPink buy2000PointButton.alpha = 1 } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn
otn

2020/11/20 06:56

認証方式が4種類ありますが、正しい物を選択していますか?
yukky1201
yukky1201

2020/11/20 07:07

1)VirtualBoxなのでコンソール操作をできると思いますが、コンソールではuserユーザでログインできますか 2)「PermitRootLogin no」を設定する前にrootユーザでsshログインはできましたか? 3)sshログインをuserユーザで試行したタイミングの/var/log/secureログはどのように記録されているか提示してください
y_programming
y_programming

2020/11/20 07:22

otn 様 現在の認証方式を確認したいのですが、どこから確認できますでしょうか。 4種類の認証方式について把握していないので、もしよろしければ教えていただけますとありがたいです。 yukky1201 様 1)すみません、これは確認していませんでした…login失敗する状況なので、ユーザ作成が意図した形になっていませんでした。 2)設定を変えてrootユーザでログインしたところ、ログインできました! userというユーザをうまく作成できていなかったようです。改めてroot以外のユーザでログインできるか試してみます。 3)記録されている部分を探してみます。見つけ次第追記します。
otn
otn

2020/11/20 07:36 編集

> どこから確認できますでしょうか。 あなたの頭の中ですね。 「パスワードだけで認証」なら、「プレインパスワード」です。 「鍵ファイルを使っての認証」なら、「~~鍵を使う」で秘密鍵を指定します。
y_programming
y_programming

2020/11/20 07:53

otn 様 理解しました、ありがとうございます! 4つの認証方式のうちブレインパスワードのラジオボタンにチェックを入れた状態で、 パスワードを入力しました。 yukky1201 様 userユーザで試したタイミングでは、/var/log/secureログは以下のようになっていました。 Nov 20 16:42:52 localhost sshd[1484]: Invalid user user from 192.168.0.7 Nov 20 16:42:52 localhost sshd[1485]: input_userauth_request: invalid user user Nov 20 16:42:52 localhost sshd[1484]: pam_unix(sshd:auth): check pass; user unknown Nov 20 16:42:52 localhost sshd[1484]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.7 Nov 20 16:42:52 localhost sshd[1484]: pam_succeed_if(sshd:auth): error retrieving information about user user Nov 20 16:42:54 localhost sshd[1484]: Failed password for invalid user user from 192.168.0.7 port 59973 ssh2 Nov 20 16:42:56 localhost sshd[1485]: Received disconnect from 192.168.0.7: 11: authentication cancelled
yukky1201
yukky1201

2020/11/20 07:59

ユーザを正しく作成できていないようですので、ユーザ作成を適切におこなってください

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。