2016-08-10 14 views
22

Hy vọng rằng tiêu đề là tự giải thích. Tôi đang cố thực hiện một việc như sau:iOS: Cách phát hiện xem người dùng có đăng ký thuê bao tự động gia hạn không

checkIfUserIsSubscribedToProduct(productID, transactionID: "some-unique-transaction-string", completion: { error, status in 
    if error == nil { 
     if status == .Subscribed { 
      // do something fun 
     } 
    } 
} 

có bất kỳ điều gì giống như mã giả định mà tôi đã cung cấp không? Tôi cảm thấy như tôi đang uống thuốc điên

Sửa

Trong câu hỏi tương tự như tôi tiếp tục nhìn thấy một câu trả lời chung của "oh bạn gotta xác nhận" nhưng không có lời giải thích về cách, hoặc thậm chí là một nhận là những gì . Ai đó có thể cung cấp cho tôi cách "xác thực hóa đơn" không? Tôi đã thử this tutorial nhưng dường như không hoạt động.

Edit - Đối với Bounty

hãy giải quyết các tình huống sau đây: Một người dùng đăng ký thuê bao tự động tái tạo của tôi và nhận được nội dung kỹ thuật số hơn vì nó - mát mẻ, thực hiện. Nhưng làm cách nào để kiểm tra xem đăng ký đó vẫn hợp lệ (tức là họ không hủy đăng ký của họ) mỗi khi họ mở ứng dụng? Giải pháp đơn giản nhất để kiểm tra điều này là gì? Có điều gì giống như mã giả định mà tôi đã cung cấp trong câu hỏi của mình không? Vui lòng hướng dẫn tôi qua điều này và cung cấp thêm bất kỳ chi tiết nào về chủ đề có thể hữu ích.

Trả lời

16

Tôi biết mọi người rất quan tâm đến tôi và tôi đã làm thế nào - không sợ, giải quyết được vấn đề của tôi. Vấn đề chính là tôi đã thử the garbage and outdated code in this link, nhưng nó không hoạt động nên tôi đã từ bỏ nó. Sau đó, tôi trở lại với nó và thực hiện nó với Alamofire và nó hoạt động tuyệt vời. Đây là giải pháp mã:

Swift 3:

let receiptURL = Bundle.main.appStoreReceiptURL 
let receipt = NSData(contentsOf: receiptURL!) 
let requestContents: [String: Any] = [ 
    "receipt-data": receipt!.base64EncodedString(options: []), 
    "password": "your iTunes Connect shared secret" 
] 

let appleServer = receiptURL?.lastPathComponent == "sandboxReceipt" ? "sandbox" : "buy" 

let stringURL = "https://\(appleServer).itunes.apple.com/verifyReceipt" 

print("Loading user receipt: \(stringURL)...") 

Alamofire.request(stringURL, method: .post, parameters: requestContents, encoding: JSONEncoding.default) 
    .responseJSON { response in 
     if let value = response.result.value as? NSDictionary { 
      print(value) 
     } else { 
      print("Receiving receipt from App Store failed: \(response.result)") 
     } 
} 
+1

Tôi đồng ý với câu trả lời tuyệt vời của bạn tuy nhiên, Đối với mối quan tâm an ninh, ý tưởng tốt của nó để kiểm tra ngày hết hạn trên máy chủ của bạn bên với táo. 'let currentTime = NSDate(). timeIntervalSince1970 let expired = currentTime> expiresTime' Nếu người dùng thay đổi ngày của thiết bị thành quá khứ, việc kiểm tra đó có thể vượt qua, – abdimuna

+0

điểm tốt. Giả sử phía máy chủ của tôi không là gì ngoài Firebase? – rigdonmr

+0

Tôi đã không làm việc với firebase trong kịch bản đó, nhưng nó mát mẻ nếu bạn lạnh kiểm soát xác nhận trên kết thúc trở lại của bạn. – abdimuna

1

Bạn đang cố gắng đạt được điều gì đặc biệt? Bạn có muốn kiểm tra một ID Apple cụ thể không?

Tôi rất nghi ngờ rằng điều này là có thể thông qua SDK. Tham khảo Is it possible to get the user's apple ID through the SDK? bạn có thể thấy rằng bạn thậm chí không thể yêu cầu ID trực tiếp mà là các dịch vụ được gắn với nó.

Điều gì sẽ hoạt động là lưu trữ tất cả các giao dịch trên máy chủ của riêng bạn và tìm kiếm cơ sở dữ liệu của nó cục bộ nhưng điều đó sẽ yêu cầu ứng dụng yêu cầu ID của người dùng để ứng dụng có thể cập nhật trạng thái đăng ký bất cứ khi nào khởi chạy. của ID được liên kết với thiết bị.

Tuy nhiên, người dùng chỉ có thể nhập bất cứ điều gì mình muốn - và không chắc sẽ nhận được thông qua quy trình xem xét ứng dụng của Apple.

+1

Được rồi vì vậy Apple ID là một ví dụ xấu. Tôi chỉ cố gắng truyền đạt rằng tôi đang tìm cách kiểm tra xem đăng ký có hoạt động hay không.Nói người dùng đăng ký, sau đó xóa đăng ký của họ ngay sau đó - Tôi cần một cách để phát hiện điều đó. – rigdonmr

+0

@rigdonmr bạn có nghĩa là hủy đăng ký hoặc hủy tự động gia hạn không? nếu trước đây, quy trình được mô tả theo hủy [tại đây] (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Subscriptions.html) – Lesleh

+1

Cần xử lý cả hai trường hợp tôi đoán . Câu hỏi bao quát của tôi là, có một API cho phép tôi gửi _something cụ thể tới thuê bao của người dùng_ (nhận, ID giao dịch, v.v.) và tôi nhận lại trạng thái như "Đang hoạt động" "Đã hủy tự động gia hạn" "Đã hủy hoàn toàn". Xem tôi sẽ làm gì? – rigdonmr

1

Tôi đang sử dụng MKSoreKit https://github.com/MugunthKumar/MKStoreKit để tự động làm mới subscriptions.but nó là khách quan c bạn có thể kiểm tra mã thư viện cho solution.I đang sử dụng nó trong mã của tôi và nó hoạt động tốt.

sử dụng dưới phương pháp mà bạn có thể dễ dàng kiểm tra tình trạng thuê bao ..

if([MKStoreManager isProductPurchased:productIdentifier]) { 
//unlock it 
} 

Nó được id apple từ điện thoại và tôi nghĩ rằng đó là người dùng cụ thể

Các vấn đề liên quan