iOSアプリをビルドしたがFirebase Authenticationでエラーとなる
iOSアプリのビルド後、インストールし起動したが、ログイン画面でログインできない
メールアドレス・パスワードの入力後、認証を行いたい。
開発ツール「Monaca」を使用し、JavaScriptでアプリを作成しています。
MonacaのデバックおよびAndroidは正常にログイン可能なのですが、
iOSだけログイン処理ができません。
認証方法は、メールアドレス・パスワードを使用しており、firebaseSDKの'signInWithEmailAndPassword()'を呼び出す時にうまくいっていないようです。
アラートを出力し、原因を探っていますが、エラーの出力もできていない状況です。
Firebaseでは、iOSアプリの登録と'GoogleService-Info.plist'の作成・ダウンロードまで
行っております。(プロジェクトのルートフォルダに配置済み)
iOSでAuthenticationを利用するために他にやるべきことや追記するコードがあれば
教えていただきたいです。
該当するソースコード(初期処理にて読み込むJSファイル)
// FirebaseのSDKをインポート
import { initializeApp } from "https://www.gstatic.com/firebasejs/10.7.0/firebase-app.js";
import { getFirestore, collection, addDoc, getDocs, deleteDoc, doc, updateDoc, query, limit, orderBy, where, serverTimestamp, increment } from "https://www.gstatic.com/firebasejs/10.7.0/firebase-firestore.js";
import { getAuth, connectAuthEmulator, sendPasswordResetEmail, signInWithEmailAndPassword, onAuthStateChanged, signOut, initializeAuth, browserLocalPersistence,createUserWithEmailAndPassword,updateEmail,deleteUser } from "https://www.gstatic.com/firebasejs/10.7.0/firebase-auth.js";
// Firebaseの設定
const firebaseConfig = {
apiKey: "",
authDomain: "",
projectId: "",
storageBucket: "",
messagingSenderId: "",
appId: "",
measurementId: ""
};
// Firebaseの初期化
const app = initializeApp(firebaseConfig);
// Firestoreの参照を取得
const db = getFirestore(app);
// Authenticationの初期化
const auth = getAuth(app);
// window.firebaseDb = db;
Object.assign(window, {
db,
auth,
getFirestore,
collection,
addDoc,
getDocs,
deleteDoc,
doc,
updateDoc,
query,
limit,
orderBy,
where,
connectAuthEmulator,
sendPasswordResetEmail,
signInWithEmailAndPassword,
onAuthStateChanged,
signOut,
initializeAuth,
browserLocalPersistence,
createUserWithEmailAndPassword,
updateEmail,
serverTimestamp,
deleteUser,
increment
});
該当するソースコード(ログイン画面)
// ログイン処理
const email = document.getElementById("eMail").value;
const password = document.getElementById("password").value;
signInWithEmailAndPassword(auth, email, password)
.then(async (userCredential) => { // asyncキーワードを追加
// ログイン成功
const user = userCredential.user;
console.log(`user:${user.uid}`);
// emailをもとにuserコレクションを検索
const userSnapshot = await getDocs(query(collection(db, "user"),
where('objectId', '==', user.uid),
limit(1)));
console.log('ユーザーコレクション検索')
console.log(userSnapshot)
const userData = userSnapshot.docs[0].data()
if (userData.pass === '管理者') {
alert('管理者画面へ移動します。')
fn.load('push', './pages/administrator/11-01_home.html');
} else if (userData.pass === '開発者') {
alert('開発者画面へ移動します。')
fn.load('push', './pages/01-01_dev-home.html');
} else if (userData.pass === '削除') {
alert('退会処理中のアカウントです。')
} else {
alert('ユーザー画面へ移動します。')
fn.load('push', './pages/01-01_home.html');
}
})
.catch((error) => {
console.error(error);
ons.notification.alert({message: '認証に失敗しました。ID/パスワードを確認してください。'})
document.querySelector(".loginBtn").disabled = false;
});
自分で試したこと
1. iOS端末を判別するためのコードを初期処理にて読み込むJSファイルに追記(初期化の方法を分ける)
→ うまくいかず、結果は同じ
// Authenticationの初期化
const isIos = () => {
const userAgent = navigator.userAgent;
return /iPad|iPhone|iPod/i.test(userAgent);
}
// Authenticationのインスタンスを取得
let auth;
if (isIos()) {
auth = initializeAuth(app, {
persistence: browserLocalPersistence,
})
} else {
auth = getAuth(app);
}
0