使用Swift 3
当我调用此代码时,它显示为我的时区
let date = Date()
let todayDate = formatter.string(from: date)
print(todayDate)
我从StoreKit收据中调用了JSON响应,以检查original_purchase_date
和expires_date
比较todayDate
以验证收据。
例如我想做什么
if (todayDate > expires_date ) {
cancel subscription
}
如果Apple的purchase_date和expires_date在GMT时区,而todayDate在用户所在的时区,则我无法匹配日期。
因此,我只需要在调用Date()时转换用户所在的时区,然后将其转换为Apple服务器之类的GMT即可,这样我就可以检查todayDate是否通过了Auto Renewable订阅上的过期数据。
此外,这是防止应用程序被黑客入侵的好方法吗?我使用php从服务器上收到了收据,该收据从Apple进行了验证。
if parseJSON["status"] as? Int == 0 {
print("Status Code for Receipt = 0!")
// Checking "latest_receipt_info"
if let receiptInfo: NSArray = parseJSON["latest_receipt_info"] as? NSArray {
let lastReceipt = receiptInfo.lastObject as! NSDictionary
// Get last receipt
print("\nLAST RECEIPT INFORMATION: \n", lastReceipt)
// Format date
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale!
// Get "original_purchase_date" as NSDate
let subscriptionBoughtDate: NSDate = formatter.date(from: lastReceipt["original_purchase_date"] as! String) as NSDate!
print("\n - DATE BOUGHT SUBSCRIPTION = \(subscriptionBoughtDate)\n")
// Get "expires_date" as NSDate
let subscriptionExpirationDate: NSDate = formatter.date(from: lastReceipt["expires_date"] as! String) as NSDate!
print("\n - DATE SUBSCRIPTION EXPIRES = \(subscriptionExpirationDate)\n")
// Get Todays Date
let date = Date()
let todayDate = formatter.string(from: date)
print("\n - DATE TODAY = \(todayDate)\n")
// See if current date has passed expired date
}
JSON回应
LAST RECEIPT INFORMATION:
{
"expires_date" = "2017-08-03 04:50:08 Etc/GMT";
"expires_date_ms" = 1501735808000;
"expires_date_pst" = "2017-08-02 21:50:08 America/Los_Angeles";
"is_trial_period" = false;
"original_purchase_date" = "2017-08-02 15:27:27 Etc/GMT";
"original_purchase_date_ms" = 1501687647000;
"original_purchase_date_pst" = "2017-08-02 08:27:27 America/Los_Angeles";
"original_transaction_id" = 1000000552288255;
"product_id" = "com.example.gg.month";
"purchase_date" = "2017-08-03 04:45:08 Etc/GMT";
"purchase_date_ms" = 1501735508000;
"purchase_date_pst" = "2017-08-02 21:45:08 America/Los_Angeles";
quantity = 1;
"transaction_id" = 1000000568853433;
"web_order_line_item_id" = 1000000055887122;
}
- DATE BOUGHT SUBSCRIPTION = 2017-08-02 15:27:27 +0000
- DATE SUBSCRIPTION EXPIRES = 2017-08-03 04:50:08 +0000
- DATE TODAY = 2017-08-04 17:26:51 America/New_York
谢谢!
您只需要设置GMT的TimeZone
属性DateFormatter
即可。
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
formatter.timeZone = TimeZone(secondsFromGMT: 0)
一般的建议是:不要使用Foundation
在类型Swift
,当本土Swift
替代品可用,如Array
,Dictionary
,Locale
和Date
。使用这些替代NSArray
,NSDictionary
,NSLocale
和NSDate
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句