2014-10-13 3 views
0

Я пытаюсь получить самую последнюю информацию о квитанции на локальном устройстве, когда пользователь покупает элемент приложения. Моя проблема заключается в том, что я не могу понять, как получить последнюю квитанцию ​​(которая должна быть получена с последней покупкой) из массива квитанций в поле last_receipt_info. Как-то все поля pruchase_date_ms во всей квитанции имеют одинаковое значение.Как найти самую последнюю квитанцию ​​при покупке приложения с помощью получения стиля iOS 7

{ 
     "expires_date" = "2014-07-09 20:32:10 Etc/GMT"; 
     "expires_date_ms" = 1404937930000; 
     "expires_date_pst" = "2014-07-09 13:32:10 America/Los_Angeles"; 
     "is_trial_period" = false; 
     "original_purchase_date" = "2014-07-09 20:27:10 Etc/GMT"; 
     "original_purchase_date_ms" = 1404937630000; 
     "original_purchase_date_pst" = "2014-07-09 13:27:10 America/Los_Angeles"; 
     "original_transaction_id" = 1000000116335839; 
     "product_id" = "product1"; 
     "purchase_date" = "2014-10-13 10:28:39 Etc/GMT"; 
     "purchase_date_ms" = 1413196119831; 
     "purchase_date_pst" = "2014-10-13 03:28:39 America/Los_Angeles"; 
     quantity = 1; 
     "transaction_id" = 1000000116358850; 
     "web_order_line_item_id" = 1000000028383484; 
    }, 
      { 
     "is_trial_period" = false; 
     "original_purchase_date" = "2014-09-15 13:34:17 Etc/GMT"; 
     "original_purchase_date_ms" = 1410788057000; 
     "original_purchase_date_pst" = "2014-09-15 06:34:17 America/Los_Angeles"; 
     "original_transaction_id" = 100000; 
     "product_id" = "product2"; 
     "purchase_date" = "2014-10-13 10:28:39 Etc/GMT"; 
     "purchase_date_ms" = 1413196119831; 
     "purchase_date_pst" = "2014-10-13 03:28:39 America/Los_Angeles"; 
     quantity = 1; 
     "transaction_id" = 100000; 
    } 

В приведенном выше примере, я на самом деле сделать пробную покупку для product2, но теперь я также есть чек на Product1 с теми же purchase_date_ms. Кто-нибудь знает почему?

+0

Как вы получили квитанцию? Из пакета приложений? От восстановления? «Для транзакции, которая восстанавливает предыдущую транзакцию, дата покупки - это дата восстановления. Используйте« Дата первоначальной покупки », чтобы получить дату первоначальной транзакции» (https://developer.apple.com/library/ios/releasenotes/ Общие/ValidateAppStoreReceipt/главы/ReceiptFields.html). Я не помню 100%, но я думаю, что первоначальная дата покупки всегда является более безопасной ставкой. –

+0

Я получаю квитанции после отправки на сервер apple для проверки цели. Я не понял, что в приведенном выше примере я купил продукт1 долгое время, прежде чем я купил продукт2, но в квитанциях оба продукта имеют тот же самый buy_date – Peacemoon

+0

Можете ли вы пойти и использовать первоначальную дату покупки? –

ответ

0

Этот код может быть использован для получения последней квитанции транзакций для автоматического возобновляемую In-App покупки

if let receipt = NSBundle.mainBundle().appStoreReceiptURL { 
     if let data = NSData(contentsOfURL: receipt) { 
      let requestContents:[String:String] = ["receipt-data":data.base64EncodedStringWithOptions([]), "password": “Your Shared Secret from iTunes Connect App”] 
      let requestData = try! NSJSONSerialization.dataWithJSONObject(requestContents,options: []) 
      let request = NSMutableURLRequest(URL: NSURL(string: "https://sandbox.itunes.apple.com/verifyReceipt")!) 
      request.HTTPMethod = "POST" 
      request.HTTPBody = requestData 
      let (param, _) = Alamofire.ParameterEncoding.URL.encode(request, parameters: nil) 

      Alamofire.request(param) 
       .responseJSON(options: [], completionHandler: { (result) -> Void in 

        if(result.result.isSuccess) 
        { 
         let dictionary : NSDictionary = result.result.value as! NSDictionary 

         let status = dictionary["status"] as! Int 

         if(status == 0) 
         { 
          let receipts: NSMutableArray = dictionary["latest_receipt_info"] as! NSMutableArray 

          let latestRecipt = receipts.lastObject as? NSDictionary 
          // This is receipt of your last transaction for auto renewable in-App purchases only 
           print(“Last Receipt \(latestRecipt)") 
         } 
         else 
         { 
          NSLog("Something went wrong Status = \(status)") 
          if(status == 21006) 
          { 
           NSLog("subscription is Expired or cancelled") 
          } 

         } 

        } 

       }) 
     } else { 
      NSLog("Reciept has no data") 
     } 
    }else { 
     NSLog("Reciept not found") 

    } 
0

только вид на expires_time_ms в порядке убывания, а затем получить последний. Код в рубине приведен ниже:

data['receipt']['in_app'].sort_by { |x| x['expires_date'] }.last