Как программно отправить смс в React Native с помощью телефонного кредита - PullRequest
0 голосов
/ 26 апреля 2020

Я искал способ программно отправить SMS в React Native без использования сторонних API , таких как Twilio или Firebase et c. Мое намерение состояло в том, чтобы использовать кредит по телефону / доступное эфирное время на моей SIM-карте .

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел решение по следующей ссылке, но немного отредактировал его, так как исходный файл выдает ошибки во время компиляции:

Примечание: Это решение требует от вас расширения вашего текущего кода React Native база с родными Java модулями кода. Но не позволяйте этому пугать вас.

Ссылка: Отправка прямых SMS-сообщений в React-Native Android от Fateme Fazli

Шаг 1. Создание SendSMSModule. java

Go в вашу папку android/app/src/main/java/com/your_project_name для создания модуля DirectSmsModule. java, используйте приведенный ниже код Java.

//DirectSmsModule.java  : This is the name of the Java Class/File   
package com.your_project_name; //make sure to change to your project's actual name.

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.uimanager.IllegalViewOperationException;
import android.telephony.SmsManager;  //++ make sure this package is available always

public class DirectSmsModule extends ReactContextBaseJavaModule {

    public DirectSmsModule(ReactApplicationContext reactContext) {
        super(reactContext); //required by React Native
    }

    @Override
    //getName is required to define the name of the module represented in JavaScript
    public String getName() { 
        return "DirectSms";
    }

    @ReactMethod
    public void sendDirectSms(String phoneNumber, String msg) {
        try {      
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(phoneNumber, null, msg, null, null);    
            System.out.println("message sent successfully.");
        } catch (Exception ex) {
            System.out.println("couldn't send message.");
        } 
    }
}

Шаг 2. Создайте DirectSmsPackage. java Модуль

В той же папке android/app/src/main/java/com/your_project_name, где у вас сейчас, вероятно, 3 Java файла, добавьте этот 4-й: DirectSmsPackage. java

//DirectSmsPackage.java
package com.your_project_name;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.enoxscanner.DirectSmsModule;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class DirectSmsPackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        //this is where you register the module
        modules.add(new DirectSmsModule(reactContext));
        return modules;
    }
}

Шаг 3: Зарегистрируйте DirectSmsPackage

Теперь зарегистрируйте модуль, который мы только что создали выше , Это почти то же самое, что и с теми пакетами, которые необходимо вручную связать после добавления или установки.

В этой же папке найдите MainApplication. java файла и найдите следующий раздел кода, затем добавьте строку, выделенную как , добавьте эту строку : Обратите внимание, что вы редактируете getPackages() function

@Override
        protected List<ReactPackage> getPackages() {
          @SuppressWarnings("UnnecessaryLocalVariable")
          List<ReactPackage> packages = new PackageList(this).getPackages();
          // Packages that cannot be autolinked yet can be added manually here, for example:
          // packages.add(new MyReactNativePackage());

          packages.add(new DirectSmsPackage()); //++ add this line here ++
          return packages;
        }

Шаг 4. Вызовите sendDirectSMS в вашем сценарии RN

import React, { Component } from 'react';
import { NativeModules, PermissionsAndroid } from 'react-native'; 

//++ import NativeModules since we are using a Native external module
...

const DirectSms = NativeModules.DirectSms;

export class SMSScreen extends Component {

sendDirectSms = async () => {
        try {
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.SEND_SMS,
                {
                    title: 'Tadiwanashe App Sms Permission',
                    message:
                        'Tadiwanashe App needs access to your inbox ' +
                        'so you can send messages in background.',
                    buttonNeutral: 'Ask Me Later',
                    buttonNegative: 'Cancel',
                    buttonPositive: 'OK',
                },
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                DirectSms.sendDirectSms('0772......', 'This is a direct message from your app.');
            } else {
                console.log('SMS permission denied');
            }
        } catch (err) {
            console.warn(err);
        }
    }

    render() {
        return (
            <View style={styles.mother_container}>
                <View style={styles.container}>
                    <TextInput secureTextEntry={true} style={styles.input}
                        underlineColorAndroid="transparent"
                        placeholder="Enter PIN."
                        placeholderTextColor="black"
                        autoCapitalize="none"
                        onChangeText={this.handlePIN}
                        textAlign={'center'}
                    />
                    <TouchableOpacity
                        style={styles.button}
                        onPress={() => this.sendDirectSms()}>
                        <Text style={styles.submitButtonText} selectTextOnFocus={true}> Submit </Text>
                    </TouchableOpacity>
                </View>
                <AppFooter bgColor='#fff' textColor='grey' />
            </View>
        )
    }
}

export default SMSScreen ;

ПРИМЕЧАНИЕ:

  • Такие приложения, которые автоматически отправляют SMS, могут не допускается в Google.
  • Вы не будете получать SMS-сообщения до тех пор, пока пользователь не получит разрешение на ваше приложение, поэтому мы импортировали разрешения Android.
  • По приведенной выше ссылке вы получите правильное объяснение большая часть деталей, это не полностью моя работа, а просто отредактировано соответствующим образом после того, как понял, что в исходном коде статьи были некоторые ошибки, а также статья находится на платформе, которая затрудняет предоставление надлежащего вклада. are to SO.
...