1.記得先去 Firebase console 開啟 phone auth 服務。
RN 跟 web 不同,不需要 initializeApp()
iOS
2.加入 URL scheme 到 info.plist
open the GoogleService-Info.plist configuration file, and look for the REVERSED_CLIENT_ID key and add to info.plist
例如:
Copy <key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string></string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps....-...</string>
</array>
</dict>
</array>
https://stackoverflow.com/questions/61514076/firebase-phone-auth-getting-ios-error-register-custom-url-scheme
3.可以到下方改變簡訊內容 (非必要)
範例:
Copy import React , {useState} from 'react' ;
import auth from '@react-native-firebase/auth' ;
import {Text , View , TextInput , Button} from 'react-native' ;
function PhoneSignIn () {
// If null, no SMS has been sent
const [ confirm , setConfirm ] = useState ( false );
const [ code , setCode ] = useState ( '' );
// Handle the button press
async function signInWithPhoneNumber (phoneNumber) {
const confirmation = await auth () .signInWithPhoneNumber (phoneNumber);
setConfirm (confirmation);
}
async function confirmCode () {
try {
let result = await confirm .confirm (code);
console .log (result);
} catch (error) {
console .log ( 'Invalid code.' );
}
}
if ( ! confirm) {
return (
< Button
title = "Phone Number Sign In"
onPress = {() => signInWithPhoneNumber ( '+886...' )}
/>
);
}
return (
<>
< Text >Phone Auth</ Text >
< TextInput
style = {{borderBottomWidth : 1 , borderColor : 'black' }}
value = {code}
onChangeText = {text => setCode (text)}
/>
< Button title = "Confirm Code" onPress = {() => confirmCode ()} />
</>
);
}
const App = () => {
return (
< View style = {{padding : '10%' , paddingTop : '50%' }}>
< Text style = {{fontSize : 20 , textAlign : 'center' }}>Phone Auth 範例</ Text >
< View >
< PhoneSignIn />
</ View >
</ View >
);
};
export default App;
之後你的手機會收到簡訊。
Tip: 另外也可以新增測試用號碼,避免重複發送多次後被暫停使用
Android
Androidn 流程稍微比較多
1.加入相關 Gradle script (app/build.gradle)
Copy dependencies {
implementation 'androidx.browser:browser:1.3.0'
implementation 'com.google.android.gms:play-services-safetynet:18.0.1'
implementation platform ( 'com.google.firebase:firebase-bom:29.3.1' )
implementation 'com.google.firebase:firebase-analytics'
https://rnfirebase.io/#configure-firebase-with-android-credentials
2.加入 sha 指紋:
獲取 sha1, sha256 hash 後加入 firebase console
Copy keytool -list -v -alias androiddebugkey -keystore ./android/app/debug.keystore
3. 加入測試用電話
這邊加入後使用測試電話發簡訊時則不會實際收到簡訊,但如果沒加入測試電話每天只能發 50 個簡訊
可能錯誤
1.
Copy Error: [auth/app-not-authorized] This app is not authorized to use Firebase Authentication. Please verify that the correct package name and SHA-1 are configured in the Firebase Console. [ A safety_net_token was passed, but no matching SHA-256 was registered in the Firebase console. Please make sure that this application’s packageName/SHA256 pair is registered in the Firebase Console. ]
這邊要確認下載 android/app 內的 debug.keystore 裡面的sha1, sha256 是不是就是這把 key的,有時會讀取到根目錄下的 ~/.android/debug.keystore