Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. iOS SDK

Mặt Hàng trong Ứng Dụng trong iOS với Swift 3

by
Difficulty:BeginnerLength:LongLanguages:

Vietnamese (Tiếng Việt) translation by Hai Anh Hoang (you can also view the original English article)

Final product image
What You'll Be Creating

Giới thiệu

Mặt hàng trong ứng dụng là một tính năng tuyệt vời cho tất cả những nhà phát triển muốn tăng thu nhập và cung cấp nội dung  và các tính năng bổ sung thông qua các ứng dụng của họ. Ví dụ, bạn có thể mua đá quý hoặc tiền xu trong các trò chơi, và  bạn có thể mở khóa các hiệu ứng hoặc các công cụ mới trong các ứng dụng nhiếp ảnh. Và bạn chỉ cần thao tác thông qua việc sử dụng một thẻ tín dụng hoặc các phương thức thanh toán khác, mà không cần thoát khỏi ứng dụng.

Trong hướng dẫn này tôi sẽ giới thiệu tất cả các bước cần thiết để tạo ra một sản phẩm mặt hàng trong ứng dụng Tiêu Thụ ĐượcKhông-Tiêu-Thụ-Được trên iTunes Connect, và tôi sẽ chỉ bạn mã code bạn cần để mua hai mặt hàng này. Tôi đã thực hiện một dự án Xcode mẫu với một tiêu đề và hai nút, chỉ cần tải nó và làm theo hướng dẫn này để hiểu cách nó hoạt động.

Tạo một Tester Sandbox trong iTunes Connect

Tôi nghĩ rằng bạn đã tạo một ứng dụng iOS trong phần My Apps trên iTunes Connect. Đầu tiên bạn cần tạo ra một Tester Sandbox để thử IAP trên điện thoại thực của bạn (đừng dùng thiết bị mô phỏng - nó không hỗ trợ mua hàng trong ứng dụng).

Nhấp vào Người Dùng và Vai Trò, chọn tab Tester Sandbox và ấn dấu (+) bên cạnh Tester.

Users and roles in iTunes Connect

Điền vào biểu mẫu để thêm một sandbox tester.  Một khi bạn đã lưu lại thông tin của bạn, quay lại phần My App và nhấp vào biểu tượng ứng dụng của bạn để nhập các chi tiết của nó và tạo ra sản phẩm mặt hàng trong ứng dụng.

Tạo Sản Phẩm Mặt Hàng trong Ứng Dụng trong iTunes Connect

Sản Phẩm Tiêu Thụ Được

Nhấp vào tab Features và sau đó dấu (+) bên cạnh Mua Hàng Trong Ứng Dụng. Bạn có thể tạo ra một sản phẩm một lúc, vì vậy hãy bắt đầu với một sản phẩm Tiêu Thụ Được

Select Consumable In-App Purchase

Một Mặt Hàng trong Ứng Dụng Tiêu Thụ Được, như tên của nó, là một sản phẩm mà bạn có thể mua nhiều lần. Chúng tôi sẽ sử dụng nó để thu thập "tiền xu" trong ứng dụng thử nghiệm của mình. 

Ấn Create để khởi động Mặt Hàng trong Ứng Dụng của bạn.  Trong màn hình tiếp theo, bạn có thể thiết lập các thông tin về sản phẩm của bạn 

  • Reference Name: tên trong iTunes Connect và trong báo cáo Sales and Trends.  Nó sẽ không hiển thị trên App Store và bạn có thể nhập bất kỳ tên nào bạn muốn, nhưng nó không được dài hơn 64 ký tự.
  • Product ID: Một chữ số định danh duy nhất do ứng dụng tải về để nhận biết sản phẩm của bạn. Thông thường nhà phát triển sử dụng cú pháp trang web-đảo ngược cho ID của sản phẩm. Trong ví dụ này, chúng tôi chọn com.iaptutorial.coins. Sau này chúng tôi sẽ dán ID này như một string vào code của chúng tôi.
  • Price: Chọn một mức giá từ menu dropdown.  Hãy nhớ rằng để có thể bán mặt hàng trong ứng dụng của bạn trên App Store, bạn phải đăng ký Paid Application Agreement trong phần Agreements, Tax & Banking
  • Hỗ trợ ngôn ngữ: Vì lợi ích của hướng dẫn này chúng tôi đã chọn chỉ có tiếng Anh, nhưng bạn có thể thêm nhiều ngôn ngữ khác bằng cách bấm vào nút (+). Sau đó, gõ Display NameDescription. Cả hai sẽ được hiển thị trên App Store.
  • Ảnh chụp màn hình: Tải lên một ảnh chụp màn hình để xem lại. Nó sẽ không được hiển thị trong App Store và nó phải có  kích thước phù hợp cho nền tảng ứng dụng của bạn, do đó, nếu ứng dụng của bạn là Universal, bạn có thể tải lên một ảnh chụp màn hình iPad.
  • Các Ghi Chú Nhận Xét: Bất kỳ thông tin bổ sung về Mặt Hàng trong Ứng Dụng của bạn mà có thể hữu ích cho người xem.
Create a new IAP product

Khi bạn đã hoàn tất, bấm vào Save và bạn sẽ nhận được cảnh báo này:

Mặt Hàng trong Ứng Dụng đầu tiên của bạn phải được nộp cùng một phiên bản mới của ứng dụng. Chọn nó từ phần Các Măt Hàng trong Ứng Dụng của ứng dụng và nhấp vào Gửi.

Sản Phẩm Không-Tiêu-Thụ-Được 

Bây giờ nhấp vào nút Mặt Hàng trong Ứng Dụng trên danh sách bên trái, ngay phía trên nút Game Center và thêm một sản phẩm Mặt Hàng trong Ứng Dụng mới. Lần này, chọn tùy chọn Không-Tiêu-Thụ-Được:

Create a Non-Consumable product

Nhấp vào Create và lặp lại các bước chúng tôi đã đề cập ở trên. Vì đây là một sản phẩm Không-Tiêu-Thụ-Được, người dùng sẽ chỉ có thể mua nó một lần, và Apple yêu cầu khả năng để khôi phục lại những mua bán như vậy. Điều đó xảy ra trong trường hợp bạn gỡ bỏ cài đặt ứng dụng và cài đặt lại nó một lần nữa, hoặc tải về từ một thiết bị khác với cùng một Apple ID của bạn và cần tải lại đơn hàng của bạn mà không phải trả tiền hai lần. Vì vậy, sau đó chúng tôi sẽ thêm một chức năng Restore Purchase trong code của chúng tôi.

ID của sản phẩm chúng tôi tạo ra bây giờ là com.iaptutorial.premium, với mức giá USD $2,99. Chúng tôi gọi nó là Phiên Bản Unlock Premium.

Một khi bạn đã điền xong vào tất cả các mục, lưu sản phẩm của bạn và trở về trang Mặt Hàng trong Ứng Dụng. Bây giờ bạn nên có một danh sách gồm hai sản phẩm của bạn với Name, Type, IDStatus được thiết lập là Ready to Submit.

In-app Purchases list

Trở lại trang ứng dụng của bạn bằng cách nhấp vào App Store và nút Prepare for Submissions. Cuộn xuống phần In-App Purchases, ngay bên dưới General App Information và nhấp vào nút (+) để thêm sản phẩm Mặt Hàng trong Ứng Dụng của bạn.

Add In-App Purchases to your apps info page

Chọn tất cả và bấm vào Done.

Select your IAP products

Cuối cùng, nhấp vào Save ở góc trên bên phải của màn hình và bạn đã hoàn thành việc cài đặt cấu hình sản phẩm Mặt Hàng trong Ứng Dụng trên iTunes Connect.

Đăng nhập vào Tester Sandbox trên thiết bị iOS

Trước khi nói đến code, còn một điều nữa phải làm. Đi đến Settings > iTunes & App Store trên thiết bị iOS của bạn. Nếu bạn đã đăng nhập bằng Apple ID ban đầu của bạn, bấm vào nó và chọn Sign Out. Sau đó chỉ cần đăng nhập bằng việc uỷ nhiệm cho tester sandbox bạn tạo ra. Sau khi đăng nhập, bạn có thể nhận được một cảnh báo như thế này:

Alert from the device

Chỉ cần bỏ qua thông báo và bấm Cancel. Điện thoại sẽ yêu cầu bạn ủy nhiệm đăng nhập sandbox của bạn một lần nữa trong khi cố gắng mua hàng và sẽ xác nhận tài khoản thử nghiệm của bạn vì vậy bạn sẽ không bị tính phí vào thẻ tín dụng để mua bất kỳ món gì.

Thoát khỏi Settings, cắm thiết bị vào máy Mac của bạn thông qua cáp USB, và cuối cùng bắt đầu code!

Phần Code

Nếu bạn đã tải về các dự án thử nghiệm của chúng tôi, bạn sẽ thấy rằng tất cả các code cần thiết cho việc mua hàng trong ứng dụng đã được viết, do đó, nếu bạn chạy nó bạn sẽ nhận được một cái gì đó như thế này:

Demo IAP app

Nếu bạn muốn thử nghiệm ứng dụng, bạn nên thay đổi Bundle Identifier thành ID của riêng bạn. Nếu không, Xcode sẽ không cho phép bạn chạy các ứng dụng trên một thiết bị thực tế và ứng dụng sẽ không thể nhận ra hai Mặt Hàng trong Ứng Dụng bạn đã tạo.

Chage Bundle ID in the General tab in XCode

Nhập ViewController.swift và kiểm tra code. Trước hết, chúng tôi đã thêm một import statement cho StoreKit và các tùy biến chúng ta cần để theo dõi các giao dịch thanh toán và yêu cầu sản phẩm.

Sau đó, chúng tôi đã tuyên bố một vài quan điểm hữu ích.

coinsLabelpremiumLabel sẽ được sử dụng để hiển thị các kết quả của việc mua cả hai sản phẩm. consumableLabelnonConsumableLabel sẽ hiển thị các mô tả và giá của mỗi sản phẩm Mặt Hàng trong Ứng Dụng mà chúng tôi đã tạo trước đây trong iTunes Connect.

Bây giờ là lúc để thêm một số biến:

 Hai dòng đầu là để nhắc lại ID của sản phẩm của chúng ta. Những string này cần phải giống như những string đã đăng ký trong phần Mặt Hàng trong Ứng Dụng của iTunes Connect.

  • productID là một string chúng ta sẽ sử dụng sau này để phát hiện sản phẩm chúng ta chọn để mua.
  • productsRequest là một ví dụ của SKProductsRequest, dùng để tìm kiếm các Mặt Hàng trong Ứng Dụng từ ứng dụng của bạn trên iTunes Connect.
  • iapProducts là một array đơn giản của SKProducts. Xin lưu ý rằng tiền tố SK có nghĩa là StoreKit, nền tảng iOS mà chúng tôi sẽ sử dụng để xử lý việc mua bán.

Hai dòng cuối gồm hai biến kiểu BooleanInteger dùng để theo dõi việc mua tiền xu và phiên bản đặc biệt, tương ứng với sản phẩm tiêu thụ được và không tiêu thụ được. 

Các code sau đây trong viewDidLoad() thực hiện một số điều ngay khi ứng dụng khởi động:

Đầu tiên chúng tôi chỉ cần ghi lại mỗi giao dịch lên Xcode console. Sau đó, chúng tôi hiển thị tổng số tiền xu mà chúng tôi đã mua với coinsLabel. Vì chúng tôi đang chạy ứng dụng thử nghiệm lần đầu tiên, nó sẽ hiển thị COINS: 0.

Những statement if quy định chữ của premiumLabel xem mặt hàng không-tiêu-thụ-được có được mua hay không.  Khi bắt đầu, nó sẽ hiển thị Premium version LOCKED! vì chúng tôi chưa mua phần premium. 

Dòng cuối cùng của code là một phương pháp mà chúng ta sẽ thấy sau này, đơn giản là fetch lại sản phẩm mà chúng ta đã lưu trữ trước đó trong iTunes Connect.

Bây giờ hãy xem cả hai nút mua đã thiết lập trong ứng dụng demo của chúng ta làm được gì:

Cả hai phương pháp sẽ chạy một chức năng kiểm tra xem thiết bị có thể mua, và nếu nó có thể, ứng dụng sẽ dùng các phương pháo tùy biến StoreKit để xử lý việc mua.

Như đã đề cập ở trên, chúng ta cần một nút thứ ba để khôi phục lại mặt hàng không-tiêu-thụ-được của chúng ta. Đây là phần code của nó:

Chức năng IBAction được gắn vào nút Restore Purchase trong Storyboard và bắt đầu kết nối với hệ thống mua hàng trong ứng dụng của Apple để khôi phục lại việc mua nếu giao dịch đã được thực hiện.

paymentQueueRestoreCompletedTransactionsFinished() là phương pháp tùy biến từ nền tảng StoreKit sẽ giúp trả biến nonConsumablePurchaseMade của chúng tôi về true sau khi giao dịch mua đã được khôi phục thành công.

Chúng ta đã làm xong các nút, vì vậy, hãy xem những gì hàm fetchAvailableProducts() làm:

Chúng ta đầu tiên tạo một ví dụ của NSSet, mà về cơ bản là một array các string.  Chúng tôi sẽ lưu trữ ID hai sản phẩm chúng tôi đã tuyên bố trước đó.

Sau đó chúng tôi bắt đầu một SKProductsRequest dựa trên các từ định danh, để ứng dụng hiển thị các thông tin về các sản phẩm mua hàng trong ứng dụng (mô tả và giá), mà sau đó sẽ được xử lý bằng phương pháp tùy biến này:

Trong hàm trên, đầu tiên chúng ta phải kiểm tra xem có bất kỳ sản phẩm đã đăng ký tại iTunes Connect và thiết lập array iapProducts của chúng ta cho phù hợp. Sau đó, chúng ta có thể khởi tạo hai SKProducts và in mô tả và giá của chúng trên các nhãn.

Trước khi đến phần mấu chốt của việc code mặt hàng trong ứng dụng, chúng ta cần thêm một vài hàm:

Hàm đầu tiên sẽ kiểm tra nếu thiết bị của chúng ta có thể mua. Hàm thứ hai chúng ta có thể gọi từ hai nút.  Nó bắt đầu xếp hàng thanh toán và thay đổi biến productID của chúng tôi thành productIdentifier đã chọn.

Bây giờ chúng ta cuối cùng đã đến phương pháp tùy biến cuối cùng để xử lý các kết quả thanh toán:

Hàm này có một switch statement để kiểm tra mỗi bước của quy trình thanh toán. case đầu tiên được gọi là nếu giao dịch được thực hiện thành công và hoàn tất.

Bên trong khối này, chúng ta phải kiểm tra những gì ID sản phẩm chúng ta đã chọn và thực hiện các hành động cần thiết để cập nhật ứng dụng của chúng ta-vì vậy, nếu người dùng chúng ta mua thêm 10 coin, chúng ta sẽ thêm 10 vào biến coins, tiết kiệm giá trị của nó với UserDefaults, Hiển thị số xu chúng ta mớiđạt được, và gửi đi một cảnh báo về nó.

Xin lưu ý rằng bạn có thể mua nhiều lần không có giới hạn vì nó là một mặt hàng trong ứng dụng tiêu thụ được, và không cần tới một chức năng khôi phục giao dich.

Tương tự như vậy, nếu chúng ta đã mua mặt hàng premiium không tiêu thụ được, ứng dụng thay đổi biến nonConsumablePurchaseMade của chúng ta thành true, lưu nó, thay đổi các ký tự của premiumLabel và gửi một cảnh báo để thông báo cho bạn rằng việc mua đã thành công.

Hai case còn lại xử lý kết quả thanh toán cho sự thất bại và khôi phục lại. Ứng dụng sẽ tự gửi các cảnh báo nếu giao dịch của bạn không thành công vì một số lý do, hoặc nếu bạn đã khôi phục lại mặt hàng không tiêu thụ được.

Thế là xong! Bây giờ chỉ cần đảm bảo rằng bạn đang đăng nhập với ủy nhiệm Sandbox Tester của bạn và chạy ứng dụng để kiểm tra nó. Lần đầu tiên, bạn sẽ nhận được một cảnh báo như thế này:

App Store Sign In alert

Chọn Use Existing Apple ID và nhập tên đăng nhập và mật khẩu Tester Sandbox của bạn một lần nữa để đăng nhập. Điều này xảy ra bởi vì ứng dụng chỉ có thể nhận ra một người dùng thật từ cài đặt iTunes & App Store, không phải người dùng Sandbox. 

Một khi bạn đã đăng nhập, bạn sẽ có thể thực hiện việc mua bán của cả hai sản phẩm.

10 Coins purchase made

Non-Consumable Premium purchase made

Mẫu CodeCanyon 

Nếu bạn làm việc với iOS và muốn biết nhiều hơn về ngôn ngữ Swift và việc phát triển ứng dụng, hãy xem một số mẫu ứng dụng iOS của tôi trên CodeCanyon.

Hiện có hàng trăm mẫu ứng dụng iOS khác trên Envato Market, sẵn sàng để được reskinned và chắc chắn sẽ tăng tốc độ công việc của bạn. Hãy xem chúng nhé!  Bạn có thể tiết kiệm nhiều giờ làm việc trên ứng dụng tiếp theo của bạn.

Kết Luận 

Trong hướng dẫn này, chúng tôi đã bao gồm tất cả các bước cần thiết để tạo ra các mặt hàng trong ứng dụng trên iTunes Connect và làm thế nào để viết code để kích hoạt chúng trong ứng dụng của bạn. Tôi hy vọng bạn có thể đưa kiến thức này để sử dụng trong các ứng dụng iOS tiếp theo của bạn!

Cảm ơn bạn đã đọc, và hẹn gặp bạn lần sau nhé! Xin vui lòng xem các khóa học khác của chúng tôi và các hướng dẫn về phát triển ứng dụng iOS với Swift.

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.