この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。モバイルアプリサービス部の平屋です。前回の記事に引き続き、Apple Pay についての情報を紹介していきます。
本記事では watchOS アプリを Apple Pay に対応させる場合に必要な実装を解説していきます。
Apple Pay の概要や環境構築などについては以下の記事などをご覧ください。
- [iOS 10] 開発者のための Apple Pay 概要 | Developers.IO
- [iOS 10] Apple Pay 対応アプリ開発のための環境構築について | Developers.IO
また、iOS アプリを Apple Pay に対応させる場合に必要な実装については以下の記事で解説しています。
watchOS アプリで実装しなければならないものは基本的に iOS の場合と同じですので、本記事では iOS と watchOS アプリとで実装内容が異なる部分を中心に解説していきます。
検証環境
Xcode Version 8.0 (8A218a)
Apple Pay の利用可否をチェックする
iOS の場合は PKPaymentAuthorizationViewController
を使用しましたが、watchOS アプリでは PKPaymentAuthorizationController
を使用します。
PKPaymentAuthorizationViewController
と PKPaymentAuthorizationController
の役割は同じです。watchOS アプリ等のビューコントローラーが使用できない環境では PKPaymentAuthorizationController
を使用します。
両クラスとも同様のメソッドが用意されているので使い方はほぼ同じです。
// Apple Pay 自体が使用できる状態かどうか
if PKPaymentAuthorizationController.canMakePayments() {
// Apple Pay に対応している
} else {
// Apple Pay に対応していない
}
// クレジットカードが「Wallet」アプリに登録済みかどうか
if PKPaymentAuthorizationController.canMakePayments(usingNetworks: PKPaymentRequest.availableNetworks()) {
// 利用可能な決済ネットワークが 1 つ以上ある場合 (クレジットカードが登録済みの場合)
} else {
// 利用可能な決済ネットワークがない場合
}
Apple Pay ボタンを表示する
iOS の場合は PKPaymentButton
を使用しましたが、watchOS では WKInterfacePaymentButton
を使用します。
WKInterfacePaymentButton
には type
や style
プロパティがなく、見た目の変更はできません。
class InterfaceController: WKInterfaceController {
@IBOutlet var payButton: WKInterfacePaymentButton!
// ...
}
動作結果
以下の外観のボタンが表示されます。
ペイメントシートを表示させる
PKPaymentAuthorizationController
を作成し、present(completion:)
メソッドを使用してペイメントシートを表示させます。
func pay() {
// ...
// Display our payment request
let controller = PKPaymentAuthorizationController(paymentRequest: request)
controller.delegate = self
controller.present(completion: nil)
}
動作結果
ペイメントシートの上部には、金額と支払先のみ表示されます。サイドボタンをダブルクリックすると、決済処理が開始されます。
スクロールすると、カード選択 UI や金額の内訳を見る事ができます。カードは横スワイプで選択できます。
ペイメントシートまわりのイベントをハンドリングする
任意のクラスを PKPaymentAuthorizationControllerDelegate
に適合させて、ペイメントシートまわりのイベントをハンドリングします。
PKPaymentAuthorizationControllerDelegate
には PKPaymentAuthorizationViewControllerDelegate
と同様のメソッドが用意されています。
// ユーザーがペイメントリクエストを承認した時に呼ばれる
func paymentAuthorizationController(_ controller: PKPaymentAuthorizationController,
didAuthorizePayment payment: PKPayment,
completion: @escaping (PKPaymentAuthorizationStatus) -> Void) {
print("didAuthorizePayment!")
completion(.success)
}
// 決済の全ての処理が終わった時、または決済がキャンセルされた時に呼ばれる
func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
print("DidFinish!")
}
さいごに
本記事では watchOS アプリを Apple Pay に対応させる場合に必要な実装を解説しました。Apple Watch の制限や使用される環境に応じて、iOS 版とは違うものになっていることがよくわかりました。
watchOS アプリで Apple Pay に対応させたい方の参考になれば幸いです!