Модуль React Native – невозможно получить номер телефонаAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Модуль React Native – невозможно получить номер телефона

Сообщение Anonymous »

Я реализовал модуль React Native (PhoneNumberHintModule) для получения телефонных номеров с помощью API Smart Lock для паролей. Кажется, что собственный модуль реализован правильно, и я добавил необходимый прослушиватель событий в свой код React Native. Однако я столкнулся с проблемой, из-за которой номер телефона не извлекается успешно.
Вот мой собственный код модуля PhoneNumberHintModule:

Код: Выделить всё

public class PhoneNumberHintModule extends ReactContextBaseJavaModule {

private static ReactApplicationContext reactContext;
private static final int CREDENTIAL_PICKER_REQUEST = 1;
private static Promise mPromise;
private static final String EVENT_PHONE_NUMBER_SELECTED = "phoneNumberSelected";

private final BaseActivityEventListener activityEventListener = new BaseActivityEventListener() {
@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
PhoneNumberHintModule.this.onActivityResult(requestCode, resultCode, data);
}
};

public PhoneNumberHintModule(ReactApplicationContext context) {
super(context);
reactContext = context;
if (reactContext != null) {
reactContext.addActivityEventListener(activityEventListener);
}
}

@NonNull
@Override
public String getName() {
return "PhoneNumberHintModule";
}

@ReactMethod
public void getPhoneNumberHint(final Promise promise) {
mPromise = promise;
final Activity currentActivity = getCurrentActivity();

if (currentActivity == null) {
promise.reject("ACTIVITY_NOT_AVAILABLE", "Activity is not available");
return;
}

Context context = getReactApplicationContext();
HintRequest hintRequest = new HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build();

IntentSender intent = Credentials.getClient(context).getHintPickerIntent(hintRequest).getIntentSender();

try {
currentActivity.startIntentSenderForResult(
intent,
CREDENTIAL_PICKER_REQUEST,
null,
0,
0,
0,
new Bundle()
);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
sendErrorToReactNative("SEND_INTENT_ERROR", e.getMessage());
}
}

private void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CREDENTIAL_PICKER_REQUEST) {
if (resultCode == Activity.RESULT_OK) {
handleCredentialResult(data);
} else {
sendErrorToReactNative("RESULT_NOT_OK", "Result code is not OK");
}
}
}

private void handleCredentialResult(Intent data) {
if (data != null) {
Credential credential = data.getParcelableExtra(Credential.EXTRA_KEY);
if (credential != null) {
String phoneNumber = credential.getId();
if (phoneNumber != null) {
emitPhoneNumberSelectedEvent(phoneNumber);
if (mPromise != null) {
mPromise.resolve(phoneNumber);
}
} else {
sendErrorToReactNative("PHONE_NUMBER_NULL", "Phone number is null");
}
} else {
sendErrorToReactNative("CREDENTIAL_NULL", "Credential is null");
}
} else {
sendErrorToReactNative("DATA_NULL", "Intent data is null");
}
}

private void emitPhoneNumberSelectedEvent(String phoneNumber) {
if (reactContext != null) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(EVENT_PHONE_NUMBER_SELECTED, phoneNumber);
}
}

private void sendErrorToReactNative(String code, String message) {
if (mPromise != null) {
mPromise.reject(code, message);
}
}
}
А вот мой код React Native:

Код: Выделить всё

useEffect(() => {
const subscription = phoneNumberHintModuleEventEmitter.addListener(
'phoneNumberSelected',
phoneNumber => {
console.log('Received phone number:', phoneNumber);
},
);

return () =>  {
subscription.remove();
};
}, []);

const handleOpenHint = async () => {
try {
const phoneNumber = await PhoneNumberHintModule.getPhoneNumberHint();
console.log('Selected phone number:', phoneNumber);
} catch (error) {
console.error('Error fetching phone number hint:', error);
}
};
Я добавил прослушиватель событий в свой код React Native для прослушивания события «phoneNumberSelected», но обратный вызов не запускается.
Я подозреваю, что проблема может быть связана с собственным модулем или с тем, как я обрабатываю событие в React Native. Может ли кто-нибудь просмотреть мой код и объяснить, почему номер телефона не может быть успешно получен?
Заранее благодарим вас за помощь!

Подробнее здесь: https://stackoverflow.com/questions/775 ... one-number
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»