如何实现本机 otp 检索器并为应用程序生成哈希密钥

How to Implement react native otp retriever and generate hash key for application

React native 初学者

我正在尝试使用 react-native-sms-retriever 自动验证 OTP 我在项目

中实现了以下示例

Example implemented 这个例子不是获取散列键的证明方法。你必须通过执行命令手动获取它

当我执行命令时,它不会要求输入密码。它应该问 because of here it is

I have generated debug hash key using bellow command executed in 'java/bin' folder. But its not

keytool -exportcert -alias androiddebugkey -keystore '~\.android\debug.keystore' | xxd -p | tr -d "[:space:]" | echo -n com.opick.app cat | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

如何为发布版本生成散列密钥尝试遵循 returns 错误的密钥

keytool -exportcert -alias my-key-alias -keystore my-key.keystore | xxd -p | tr -d "[:space:]" | echo -n com.opick.app `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

我读过文件,他们说你需要为上面的 release keystore 添加 path command.for 我没有工作,请更新

主要挑战是在 cmdbash

上生成的密钥不同
import SmsRetriever from 'react-native-sms-retriever';

// Get the phone number (first gif)
 _onPhoneNumberPressed = async () => {
  try {
    const phoneNumber = await SmsRetriever.requestPhoneNumber();
  } catch (error) {
    console.log(JSON.stringify(error));
  }
 };

// Get the SMS message (second gif)
_onSmsListenerPressed = async () => {
  try {
    const registered = await SmsRetriever.startSmsRetriever();
    if (registered) {
      SmsRetriever.addSmsListener(event => {
        console.log(event.message);
        SmsRetriever.removeSmsListener();
      }); 
    }
  } catch (error) {
    console.log(JSON.stringify(error));
  }
};

超时错误请看:https://github.com/Bruno-Furtado/react-native-sms-retriever/issues/4

我已经尝试了两个三个示例,但我无法为 releasedebug 获得 hash key 然后我尝试了以下解决方案它完美地工作。 您也可以使用此代码获取 hash key,然后您可以继续实施

react-native-otp-verify

The following code will give you hash key for both release and debug apk just get the key and copy it somewhere for use

import RNOtpVerify from 'react-native-otp-verify';

getHash = () =>
   RNOtpVerify.getHash()
  .then(console.log)
  .catch(console.log);

startListeningForOtp = () =>
    RNOtpVerify.getOtp()
    .then(p => RNOtpVerify.addListener(this.otpHandler))
    .catch(p => console.log(p));

otpHandler = (message: string) => {
    const otp = /(\d{4})/g.exec(message)[1];
    this.setState({ otp });
    RNOtpVerify.removeListener();
    Keyboard.dismiss();
  }

 componentWillUnmount() {
   RNOtpVerify.removeListener();
 }

有一篇很棒的文章教程介绍了如何在未经许可的情况下在 React Native 中实现 OTP 自动验证。

Link1

但为此您需要生成 11 位唯一哈希密钥。你会发现在 link2;

Link2

react-native-otp-verify 一个很有魅力:)。好东西,它也给你散列..你需要做的就是在短信末尾附加散列。