TaigaTakeshita
@TaigaTakeshita (tig t)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌