gpt4 book ai didi

android - 无论如何,Android和IOS都可以在后台发送短信吗?

转载 作者:行者123 更新时间:2023-12-04 15:18:48 26 4
gpt4 key购买 nike

我想制作一个主要功能取决于发送短信的应用程序。在我开发 android(native) 之前,但现在我使用 React-Native 使其适用于 IOS 和 Android。

在android中,如果您获得用户许可,则可以在后台发送短信。但是在通过网络搜索后,我找不到在 react-native 中执行此操作的方法。我读到苹果不允许应用程序这样做。
我想知道是否有在后台为 Android 和 IOS 发送短信。

我已经看过的库,打开手机短信界面(充满数字和短信正文),然后用户必须按下发送按钮(我想删除这一步。我的意思是应用程序自动发送短信)。

毕竟,无论如何(库,...)可以在后台发送短信而无需为android和ios打开短信界面?

最佳答案

在安卓上,这是可能的。我也在自己的项目中实现。按照给定的步骤:
1.创建DirectSmsModule
在您的 android-> app-> src/main-> java/com/yourProject 在 MainActivity.java 旁边创建一个扩展 的 java 类ReactContextBaseJava 模块 类(class)。

//DirectSmsModule.java
package com.security_notifier;

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;


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 numbers, String msg) {
try {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(numbers, null, msg, null, null);
} catch (Exception ex) {
System.out.println("couldn't send message.");
}
}
}

2.注册DirectSmsModule
对于注册,您应该创建一个实现 ReactPackage 的新包。在 DirectSmsModule 旁边创建一个 DirectSmsPackage:
//DirectSmsPackage.java
package com.security_notifier;

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.security_notifier.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 并修改如下:
package com.security_notifier;

import android.app.Application;
import android.util.Log;

import com.facebook.react.PackageList;
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.ReactApplication;
import com.tkporter.sendsms.SendSMSPackage;
// import com.tkporter.sendsms.SendSMSPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.reactnativecommunity.netinfo.NetInfoPackage;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.soloader.SoLoader;

import java.util.List;


import com.facebook.react.shell.MainReactPackage;

public class MainApplication extends Application implements ReactApplication {

private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}

@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());

return packages;
}

@Override
protected String getJSMainModuleName() {
return "index";
}
};

@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}

@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);

}
}

4.从javascript调用sendDirectSms方法
在您的 javascript 文件中:
import React from 'react';
import {NativeModules} from 'react-native';
var DirectSms = NativeModules.DirectSms;

export default class App extends React.Component {
sendDirectSms() {
DirectSms.sendDirectSms('0935...', 'This is a direct message');
}
render() {
return (
<View>
<TouchableOpacity onPress={() => this.sendDirectSms()}>
<Text>send SMS</Text>
</TouchableOpacity>
</View>
);
}
}

5.设置用户权限
  • 对于 API 级别<23
    向您的 manifest.xml 添加权限:

  • <uses-permission android:name="android.permission.SEND_SMS"/>
  • 对于 API 23 及更高版本

  • 如果设备运行的是 Android 6.0(API 级别 23)或更高版本,并且应用的 targetSdkVersion 为 23 或更高版本,则在安装时不会通知用户任何应用权限。您的应用程序必须要求用户在运行时授予危险权限。当您的应用请求权限时,用户会看到一个系统对话框,告诉用户您的应用正在尝试访问哪个权限组。该对话框包括一个拒绝和允许按钮。我们在 javascript 文件中处理权限运行时请求:
    async sendDirectSms() {
    try {
    const granted = await PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.SEND_SMS,
    {
    title: 'YourProject App Sms Permission',
    message:
    'YourProject 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('0935...', 'This is a direct message');
    } else {
    console.log('SMS permission denied');
    }
    } catch (err) {
    console.warn(err);
    }
    }

    完成,运行 react-native run-android。
    引用: https://blog.usejournal.com/sending-direct-sms-in-react-native-android-d902d6bf1f04
    在 iOS 上,无需用户交互即可发送 SMS 的唯一方法是使用外部提供商,例如 Twilio;但消息将来自您的服务器号码,而不是来自用户。 @Paulw11 已经在您的问题中发表了评论

    关于android - 无论如何,Android和IOS都可以在后台发送短信吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54689025/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com