気づいたら10連休最終日!!
会社員になって中々まとまった休みが無い中、やってきたゴールデン10連休!!!
ここぞとばかり徹夜でアプリ作成に挑戦し、つい先日Appleの審査が通り本日リリースを迎えることが出来ました!!
何とも言えない達成感です。
その紹介も兼ねて、どういった技術を使用してこのアプリを作ったのかを簡単にまとめましたので読んでいただけると嬉しくて飛び跳ねます。
EndeLinkとは
Apple Storeの紹介にも記載してますが、このアプリはデザイナーとエンジニアに特化したお仕事探しアプリです。登録されたエンジニアまたはデザイナーの作品、金額、頻度で適切な仕事パートナーを探し出すことができます。 つまり、読んで字のごとくエンジニアとデザイナーを探すのにフォーカスしたSNSアプリです。作った背景
昔、フリーランスを少しかじっていた時期があるのですが、知人のエンジニアやデザイナーさんに頼みたいけど金額面で気を使わせたり、可動日数が合わず調整が難しかったり…苦労しました…。 その頃からエンジニアやデザイナーさんを探すことに注力した良い感じのSNSをいつか作りたいなと思っていました。 現在はフリーではなく会社員ですが、会社が副業OKなので自分も仕事相手を探す機会も出てくるだろうと思い、思い切ってこの10連休を活かして開発しようと思いました。EndeLinkはどのようにして作られたのか
デザイン

あと、スペースはなるべく統一して作りました。
例えば上記リストページはiPhoneのファーストビューで自己紹介をMax数書いても2つのリストは最低でも見せれるように空きを調整しました。
空きをきちんと取ることにより、見た目が綺麗に見える?感じがします。
あとは実際に作りながらかなり調整していきました。
開発するプラットフォーム選び

ちなみに当たり前ですが、お問い合わせも日本語で出来るのでこれも非常に助かります。
ただしお問い合わせがテクニカルだと、お金をがっつり取られる場合があるのでそこは注意していただきたいです。
興味がある方は、下記料金プランを見ていただけると大体いくら掛かるのかが分かります。
https://ja.monaca.io/pricing.html
使用したバックエンドサービス

・データベースのセキュリティについて
Firebase Realtime Databaseではセキュリティ設定を細かく設定することができますが、、、ここで唐突に問題です!
管理権限を持たない一般ユーザは下記 grandchild のルートには読み取りアクセスできますでしょうか?
{
"rules":{
".read":false,
"parent":{
"child":{
".read":true,
"grandchild":{
".read":false
}
}
}
}
}
正解は「出来ます」 なぜならその親の child ルートで読み取りを許可したので、その権限が子に引き継かれるからです。 なので読み取り先である grandchild の読み取りを不可にしても、親のアクセス権限が適用されます。
ということは仮にトップルートで読み取りがアクセス許可されていた場合は、いくら子が読み取りアクセス不可にしても全体にアクセスできてしまうことになります。
{
"rules":{
".read":true,
"parent":{
"child":{
//アクセス出来てしまう
".read":false,
"grandchild":{
//アクセス出来てしまう
".read":false
}
}
}
}
}
まーこんなことしないでしょうが。。
このようにアクセス権限は親ルートにアクセス権限をもたせた場合、それは子に影響されます。
なので今回作ったアプリではアクセス出来るルート権限ごとに細かく分けてルールを定義し、権限通りに動いてるかチェック表をつけました。
ご存知の方も多いと思いますが、Firebaseではデータのアクセス権限の確認をコンソールからシミュレートすることが出来ます。
より詳しく知りたい方は、下記ドキュメントを見てください。
https://firebase.google.com/docs/database/security/securing-data?hl=ja#read_and_write_rules_cascade
・メール認証について
今回ログイン認証としてパスワード認証とメール認証を組み合わせてログインできるようにしてます。
メール認証はログイン後に下記方法で送ることが出来ます。
firebase.auth().currentUser.sendEmailVerification().then(function() {
//success
}).catch(function(error) {
window.alert(error);
});
送られてきたメールのパラメータには mode や oobCode、apiKeyが付属してます。
メール認証の場合は mode は 'verifyEmail'になります。
他にもパスワード変更やメールアドレス変更などの際の mode があります。
参照 : https://firebase.google.com/docs/auth/custom-email-handler#create_the_email_action_handler_page
例えばメール認証の一例として
auth.checkActionCode(actionCode).then(function() {
//ワンタイムコード(oobCode)の確認
auth.applyActionCode(actionCode).then(function() {
//メールアドレス認証を確認
}).catch(function(error) {
window.alert(error);
});
}).catch(function(error) {
window.alert(error);
});
checkActionCodeでワンタイムコードを確認し有効であれば、applyActionCodeにてメールアドレス認証を確認することができます。
実際にメール認証されたかどうかは、Firebaseのログイン認証から一度ログアウトする必要があります。
メール認証の確認は firebase.auth().currentUser.emailVerified を使用します。
firebase.auth().signOut().then(function(){
firebase.auth().signInWithEmailAndPassword(email, pass).then(function (info) {
if(firebase.auth().currentUser.emailVerified) {
//メールアドレス認証済み
} else {
//メールアドレス認証エラー
}
}).catch(function (error) {
window.alert(error);
});
});
使用したJSフレームワーク

const Vue = require('vue');
const VueRouter = require('vue-router');
const Main = require('./Main');
Vue.use(VueRouter);
const routes = [{
path: '/main',
component: Main,
alias: ['/page1', '/page2', '/page3']
}];
基本的に path と component は対になってますが、例えば alias に設定した /page1 にアクセスした際に component の Main を共有して使うことが出来ます。
ユーザーから見ると /main と /page1 は別々のURLの為に当然別のページを見てると思うのですが、裏側では共通のページを見ていることになります。
Appleからの審査について
 今回アプリの審査で2回リジェクトを食らったのですが、作ったのがSNSアプリということもあり下記基準に満たしていませんでした。
最後に
このEndeLinkはApple Storeに公開されようやくスタートしたばかりなので、機能拡張やデザイン改修も含めてこれからやりたいことだらけです。あともし可能であればぜひ知り合いのデザイナーさんやエンジニアさんに紹介してもらえると有り難いです( ´^`° )
以上、読んで頂きありがとうございました。
また「いいね」を押していただけると大変励みになります(っ_ _)っ
※Firebaseの料金プランの兼ね合いから、会員数によって会員登録に制限をかける可能性があります。
※今の所、このアプリは全て無料でご利用できます(広告無)
バグ報告/ご意見は、Twitterからダイレクトメッセージにてご連絡ください!
※些細なことでも言っていただけると嬉しいです(´∩ω∩`)
※唯の批判などはスルーします、人としても。