ARHack'z リリースノート(0.2.0)

Swift

Django

Firestore

Firebase

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") } } }

どりー_ハックツ

@Friedrich_buryu

目次