GO TechTalk #28 iOSの潜在能力を引き出せ!リッチプッシュとApple Payの実践活用術

2024年7月22日に「GO TechTalk #28 iOSの潜在能力を引き出せ!リッチプッシュとApple Payの実践活用術」(connpass)を開催しました。

本記事では当日の内容を簡単に紹介します。

GO TechTalkとは?

GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。

GO株式会社が運営するタクシーアプリ『GO』およびドライバー用アプリ『GOドライバー』は、日々さまざまな機能の追加や改善を行っています。

28回目となる今回は、iOSアプリの機能追加や改善の中で得た、Apple Pay、リッチプッシュ通知、MetricKitを活用した実践的な技術と知見を共有しました。

こちらのポストのスレッドで当日の様子や雰囲気を感じていただけると思います。

登壇者紹介

今回はこちらのメンバーが登壇しました。

  • iOSエンジニア:黒田 修平
  • フルスタックエンジニア:伊藤 伸裕
  • iOSエンジニア:髙橋 秀宗(@h1d3mun3
  • 採用:森川 なな子

タクシーアプリ『GO』でのApple Pay導入

タクシーアプリ『GO』ではキャッシュレス決済が利用できましたが、新たにApple Payにも対応しました。このパートでは、Apple Payを導入した際の開発手法や、その過程で直面した課題について詳しく紹介しました。

タクシーアプリでは、配車依頼時点でApple Payの認証を行いますが、認証時点では乗車料金が確定していません。

このような金額が未確定の状況でもApple Payで支払い処理が行える仕組みや、開発チームがどのようにしてApple Payの統合を実現し、ユーザー体験を向上させたのか、また開発中に直面した以下のような課題と気づきについても紹介していますので、詳しくはぜひ動画もご覧ください。

  • Sandbox用カードは日々登録できるか確認すべき
  • Sandbox用カードで生成したトークンでは決済できないので注意
  • Apple PayのPayment Sheetのトークンの有効期限切れに注意

Q&A

Q. Apple Payの導入後、App Storeの審査は問題なく通過しましたか?

今回はまったく問題なく、スムーズにリリースできました。

Q. Apple PayのVisaは、決済金額未確定での使用はできないと聞きました。このあたりは解決しているのでしょうか?

改善に向けて取り組んでいますが、現時点ではタクシーアプリ『GO』のApple PayでもVisaは利用できない状況です。

Remote notification tricks with Notification Service Extension

Notification Service Extension(NSE)は、プッシュ通知に画像などのコンテンツを付与するリッチプッシュを実現するための仕組みです。

リッチプッシュを行うだけでなく、通知の表示制御もできるほか、制限はあるもののプッシュ通知を起点として任意のプログラムを起動させる仕組みとしても応用できます。

このパートでは、ドライバー用アプリ『GOドライバー』の通知機能を開発した際に得られた知見をもとに、NSEを活用した応用事例をご紹介しました。

Q&A

Q. 近い将来、正しい文言をサーバーから送信するようになった場合、今回実装した機能はどのように廃止していく計画でしょうか?

書き換え処理を削除する対応になるため、通常のバージョンアップで徐々に変更を浸透させられると考えています。また、強制アップデートを実施する場合もあるため、スムーズに切り替えを進めていけると思います。

Q. shared_preferencesで複数プロセスから操作するとキャッシュ不整合が発生する挙動は一般に知られているものなのでしょうか?

実装をコードリーディングしたところ、そのような挙動を確認しました。

将来の機能拡張を見据えたMetricKitの実装

タクシーアプリ『GO』ではCrashlyticsを用いてクラッシュ情報を把握していましたが、Crashlyticsで捕捉できていないクラッシュが発生していることが、お客さまからのお問い合わせで発覚しました。

調査の結果、特定のライブラリでOut of Memoryが発生していることが分かり、対策を講じました。さらにクラッシュを把握する仕組みをより強化するために、今回はMetricKitを導入しました。

MetricKitは、Appleが標準で提供する、例外やクラッシュなどの情報が含まれたレポートを受け取れるFrameworkです。

アプリに関するメトリクス情報を取得する方法はいくつかありますが、「システムがフォアグラウンドからメモリ使用量が多すぎるためにアプリを終了させた回数」といったMetricKitのレポートでしか取得できない情報もあります。

このパートでは、MetricKitでしか取得できない情報を得るための実装や、将来の機能拡張も見据えた設計の詳細などを、実際のコードを交えつつ紹介しました。

Q&A

Q. Crashlyticsで検知できなかった理由として、使っていたライブラリはバイナリで提供されていたためでしょうか?

今回のライブラリはバイナリではないため、提供方法に由来する問題ではないと考えています。

Q. 現在はOut of Memory以外のクラッシュにもMetricKitを使われているのでしょうか?

現在はOut of Memoryの検知にのみ活用しており、それ以外のクラッシュはCrashlyticsで検知しています。

アーカイブ動画

開催履歴・開催予定

GO TechTalk は不定期開催しています。過去の開催レポートは こちら にもありますので、ぜひご覧ください!

GO株式会社の最新技術情報は公式アカウント @goinc_techtalkで随時発信していきますので、ぜひフォローして続報をお待ちください!