ARHack'z リリースノート(0.2.0)
ARHack'z とは
ハックツステッカーを読み取ると、最新のイベントページにジャンプすることができるボタンとOGカードが出現するiOSアプリです。
オープンベータ版でTestFlightにアップしていますので、ハックツステッカーを持っている && iOS端末を持っている人は下記リンクからTestFlight経由でインストールしてみてください。 https://testflight.apple.com/join/luyQUEiC
アップデート情報(2022.2.20)
イベントリンクデータをFirestoreで管理
イベントページへのリンク情報をFirestoreに格納し、アプリ起動時にそこからデータ取得するようにしました。
イベントリンクの自動更新
Node.js を用いて、DoorKeeper API から Hack'z Event コミュニティ の最新のイベント情報を取得し、Firestoreに必要なデータのみを格納するAPIを作成しました。
また、更新を定期実行するよう、cronでスケジュール設定をしました。
Swift側で FirebaseFirestoreSwiftを用いて、直接FirestoreにGetRequestを送ることでデータを取得しています。
OGカードからイベントページに遷移
OGカードのViewのTouchEventが取得できていなかったので、別にそのView専用のTouchEventの処理を実装しました。
実装周りのお話し
Node.js 編
DoorKeeper API から情報を取得
DoorKeeper API へのアクセスは fetch を使って実装しました。
const fetch = require('node-fetch'); fetch('https://api.doorkeeper.jp/groups/自分のコミュニティ名/events', { method: 'GET', headers: { 'Authorization': 'Bearer \(token)' } }) .then(res => res.json()) .then(json => { var setAda = docRef.set({ public_url: json[0].event.public_url }); console.log(json[0].event.public_url) }) .then((_) => response.sendStatus(200));
Firestoreへのアクセス
firebase-admin を使って実装しました。
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); var db = admin.firestore(); var docRef = db.collection('自分のcollection名').doc('自分のdocument名'); //docRef.setで格納
functionsでの定期実行
functions.pubsub.schedule().onRun()を使って実装しました。 schedule(' 59 23 1,16 * * ') とすることで月に2回(1日と16日の23:59)実行されるように設定しました。
exports.fetchEventURL = functions.pubsub.schedule('59 23 1,16 * *').onRun((context) => { //以下省略
合わせたらこんな感じ
ライブラリ周りはrequireしてます。
const functions = require("firebase-functions"); const fetch = require('node-fetch'); var admin = require("firebase-admin"); var serviceAccount = require("firebase側からダウンロードしたjsonファイル"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); var db = admin.firestore(); var docRef = db.collection('自分のcollection名').doc('自分のdocument名'); exports.fetchEventURL = functions.pubsub.schedule('59 23 1,16 * *').onRun((context) => { fetch('https://api.doorkeeper.jp/groups/hackz-community/events', { method: 'GET', headers: { 'Authorization': 'Bearer \(token)' } }) .then(res => res.json()) .then(json => { var setAda = docRef.set({ public_url: json[0].event.public_url }); console.log(json[0].event.public_url) }) .then((_) => response.sendStatus(200)); });
Swift 編
Firestoreからデータ取得
FirebaseFirestoreSwift を使って実装しました。
import Firebase import FirebaseFirestore import FirebaseFirestoreSwift override func viewDidLoad() { super.viewDidLoad() let db = Firestore.firestore() let docRef = db.collection("自分のcollection名").document("自分のdocument名") docRef.getDocument { (document, error) in if let document = document, document.exists { self.eventURLStr = document.data()!["public_url"] as! String self.eventURL = URL(string: self.eventURLStr)! print("Document data: \(document.data())") } else { print("Document does not exist") } } }
目次