2017-11-22 14 views
0

現在、私はSwiftを使用しているiOSアプリケーションで作業しています。 InApp Purchasedを有効にしています。お支払いは完全には行っていますが、iTunes Connectからデータを表示しているときは、完全に表示されている月々の購読データが表示されますが、毎月のタブの価格を月額形式で表示しておき、ユーザーがカードをタップすると、私はこれをすることができません。説明は画像に示されています。前もって感謝します。数ヶ月の面で年間サブスクリプションを表示InApp Purchase swift iosで年間価格を表示

image1

image 2

I want show price like this

// Currently i am getting product info with this method 

    // MARK: - REQUEST IAP PRODUCTS 
func productsRequest (_ request:SKProductsRequest, didReceive response:SKProductsResponse) { 
    if (response.products.count > 0) { 
     iapProducts = response.products 
     // showHUD("Loading...") 

     let indexPath = IndexPath.init(row: 0, section: 0) 
     guard let cell = collectionView.cellForItem(at: indexPath) as? CollectionViewCell else { return } 

     let numberFormatter = NumberFormatter() 

     let firstProduct = response.products[0] as SKProduct 

     print("localizedDescription", firstProduct.localizedDescription) 
     print("localizedTitle", firstProduct.localizedTitle) 


     // Get its price from iTunes Connect 

     numberFormatter.formatterBehavior = .behavior10_4 
     numberFormatter.numberStyle = .currency 
     numberFormatter.locale = firstProduct.priceLocale 
     let price1Str = numberFormatter.string(from: firstProduct.price) 

     // Show its description 
     cell.monthlyLabel.text = "\(firstProduct.localizedTitle)" 
     cell.rupeesLabel.text = "\(price1Str!)" 
     cell.perMonthLabel.text = "\(firstProduct.localizedDescription)" 

     let indexPath1 = IndexPath.init(row: 1, section: 0) 
     guard let cell2 = collectionView.cellForItem(at: indexPath1) as? CollectionViewCell else { return } 

     let secondProd = response.products[1] as SKProduct 

     // Get its price from iTunes Connect 
     numberFormatter.locale = secondProd.priceLocale 
     let price2Str = numberFormatter.string(from: secondProd.price) 

     // Show its description 
     cell2.monthlyLabel.text = "\(secondProd.localizedTitle)" 
     cell2.rupeesLabel.text = "\(price2Str!)" 
     cell2.perMonthLabel.text = "\(secondProd.localizedDescription)" 
     // ------------------------------------ 

     } 
     } 
+0

あなたが求めていることは明確ではありません。単にiTunesConnectで設定されている価格を表示するだけでよく、それはあなたがやっているようです。年間購買の月額料金を表示するのは間違いです – Paulw11

+0

返信ありがとうPaulw115。私の編集されたqueを見てください。 –

+0

それを示すコードを書いてください。年間製品の価格を12で割る必要があります。$ 4.99 * 12は実際に$ 59.88であるので、丸めに注意してください。これは少し誤解を招く理由です。 – Paulw11

答えて

0

ちょうど12で割るよりも少し複雑です。 SKProduct.priceNSDecimalNumberクラスです。通常の浮動小数点数ではないため、標準除算演算子は機能しません。

あなたは、これはあなたがフォーマッタに渡すことができます分割NSDecimalNumberを与えるこの

product.price.dividing(by: NSDecimalNumber(decimal: Decimal(12.0))) 

ような何かをする必要があります。 1つの問題は、分割された値が誤った値に丸められることです。そのトリックは、あなたが望むようにラウンドするカスタムNSDecimalNumberHandlerを作成することです。

let behavior = NSDecimalNumberHandlerroundingMode: .down, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) 
product.price.dividing(by: NSDecimalNumber(decimal: Decimal(12.0)), withBehavior: behavior) 

これは、年間料金を月額料金で表示するのに必要なすべてのコントロールを提供するはずです。また、ユーザーをあまりにも誤解させないために、近くの総価格を表示することをお勧めします。購入フローの最適化と詐欺行為の間には細かい線があります。

+0

貴重な提案をくれたJacob Eitingに感謝します。私は李が変わった後で働いた。 –

0

ありがとうJacob Eiting。これはSwift3で私のために働いています。

let behavior = NSDecimalNumberHandler(roundingMode: .down, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false) 

     let price2Str = numberFormatter.string(from: (secondProd.price.dividing(by: NSDecimalNumber(decimal: Decimal(12.0)), withBehavior: behavior))) 

     cell2.rupeesLabel.text = "\(price2Str!)" 
関連する問題