2016-03-09 15 views
8

Hướng dẫn lập trình mua hàng trong ứng dụng cho thấy bạn có thể tiếp tục mua hàng trong ứng dụng trong NSUserDefaultshere. Tuy nhiên tôi thấy this article nói rằng nó là không an toàn và dữ liệu trong nó có thể dễ dàng truy cập và chỉnh sửa:NSUserDefaults an toàn trên iOS 8,9 như thế nào?

NSUserDefaults được lưu trữ trong plist ở định dạng nhị phân, không có mã hóa, và được lưu trữ trong thư mục của ứng dụng. Điều này có nghĩa là bất kỳ người dùng nào, thậm chí là người dùng "noobiest", có thể tinker với NSUserDefaults của bạn với 5 phút thời gian của họ.

Nếu người dùng thực sự có thể dễ dàng nhận được miễn phí mọi thứ được cung cấp dưới dạng mua hàng trong ứng dụng được sử dụng NSUserDefaults.

Bài viết vẫn chính xác cho iOS 8,9? Nếu vậy, làm cách nào để bạn tiếp tục mua hàng trong ứng dụng của mình? Tôi thích một số giải pháp đơn giản. Tôi không (cũng không muốn) xác nhận biên lai, vv ..

+4

Giá trị mặc định của người dùng không an toàn. Tuy nhiên, bạn có thực sự lưu dữ liệu nhạy cảm ở đó không? – Sulthan

+0

@Sulthan Đọc câu hỏi. Tôi muốn lưu trữ mua hàng trong ứng dụng ở đó (như Apple khuyến cáo). Tôi tin rằng mua hàng trong ứng dụng là đủ nhạy cảm. – drasto

+0

Có nhiều mô hình cách bạn có thể lưu nội dung trả phí trong cài đặt mặc định của người dùng. Nếu bạn không muốn xác thực, bạn luôn có thể sử dụng keychain. Có nhiều thư viện cho phép sử dụng đơn giản keychain, ví dụ: [Thợ khoá] (https://github.com/matthewpalmer/Locksmith). Và keychain rất an toàn. Nó cũng tồn tại nếu bạn xóa ứng dụng và có thể được chia sẻ trên các thiết bị hoặc ứng dụng. – Sulthan

Trả lời

15

Như những người khác đã nói, có thể tốt hơn là không lưu dữ liệu nhạy cảm trong UserDefaults như mua hàng trong ứng dụng hoặc rõ ràng những thứ như mật khẩu. Ngay cả những thứ như điểm số cao được lưu trong keychain tốt hơn để mọi người không thể ăn gian.

Tôi nghĩ rằng một phần Tài liệu Apple đã lỗi thời và nên được thay đổi vì UserDefaults không phải là cách để lưu trữ dữ liệu nhạy cảm, trong đó mua ứng dụng chắc chắn là IMO.

Chỉ cần lưu nội dung cơ bản trong UserDefaults như cài đặt ngôn ngữ, cài đặt âm lượng, vv

Nếu bạn muốn lưu dữ liệu nhạy cảm, bạn nên sử dụng Keychain. Bây giờ API keychain tôi nghĩ là rất khó khăn nhưng có 2 người giúp đỡ to lớn trên GitHub bạn có thể sử dụng

1) https://github.com/jrendel/SwiftKeychainWrapper

2) https://github.com/matthewpalmer/Locksmith

cá nhân tôi sử dụng đầu tiên như nhiều của nó thẳng về phía trước và dễ sử dụng hơn. Nó nghĩa đen làm cho nhiệm vụ lưu dữ liệu của bạn giống với UserDefaults. Chỉ cần sao chép các tập tin nhanh chóng vào dự án của bạn hoặc sử dụng CocoaPods và bạn đã sẵn sàng.

Cách thứ hai là nâng cao hơn và phức tạp nhưng vẫn tuyệt vời. Nó chỉ là một sự lựa chọn của những gì bạn cần và làm thế nào bạn hiểu được Keychain API.

Một điều cần ghi nhớ với keychain là dữ liệu vẫn tồn tại ngay cả khi bạn xóa ứng dụng của mình, điều mà tôi thực sự coi là một điều tốt.

Tất cả tín dụng đều được chuyển đến cả hai tác giả của trình bao bọc tương ứng.

Hy vọng điều này sẽ giúp

+0

Cảm ơn bạn. Xét về thời gian/độ phức tạp của phát triển, bạn có thể so sánh sử dụng keychain để nhận được sự bền bỉ/xác nhận không? Tôi không có CocoaPods cài đặt (không bao giờ cần thư viện bên thứ 3 cho đến nay) để cài đặt một số wrapper có thể là nhiệm vụ comsuming thời gian (có lẽ tốt hơn để sử dụng keychain trực tiếp?) – drasto

+0

Tôi không hiểu API Keychain ở tất cả và tôi cũng đấu tranh với xác nhận xác nhận trong nhiều tháng. Về khó khăn, tôi nghĩ rằng keychain là khó khăn hơn nhiều. Tôi cũng không sử dụng CocoaPods hoặc libs bên thứ 3, vì vậy nếu bạn sử dụng 1 wrapper tôi sử dụng (KeychainWrapper JRendel) hơn bạn chỉ có thể sao chép các tập tin nhanh chóng vào dự án của bạn. – crashoverride777

+1

Một điều cần ghi nhớ với keychain là dữ liệu vẫn tồn tại ngay cả khi bạn xóa ứng dụng của mình, điều mà tôi thực sự coi là một điều tốt. – crashoverride777

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