Java实现手机登录功能

具体实现

  在做项目时,想将手机注册登录整合到项目当中,但是阿里云已经不支持个人认证,腾讯云好像也不支持。有人推荐说用容联云,经过调试,成功的实现短信发送。需要注意的是,验证码是我们后端程序生成,然后由运营商接收发送的。
  首先注册一个容联云账号,然后创建一个应用,应用不用上线,没关系。代码如下:

import com.cloopen.rest.sdk.BodyType;
import com.cloopen.rest.sdk.CCPRestSmsSDK;

import java.util.HashMap;
import java.util.Random;
import java.util.Set;

/**
 * @author zxb
 */
public class MsmTest {

    /**
     * 生成六位验证码
     *
     * @return 验证码
     */
    public static String generateCode() {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            sb.append(random.nextInt(10));
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        // 整合容联云短信服务
        //生产环境请求地址:app.cloopen.com
        String serverIp = "app.cloopen.com";
        //请求端口
        String serverPort = "8883";
        //主账号,登陆云通讯网站后,可在控制台首页看到开发者主账号ACCOUNT SID和主账号令牌AUTH TOKEN
        String accountSId = "accountSId"; // 需修改
        String accountToken = "auth token"; // 需修改
        //请使用管理控制台中已创建应用的APPID
        String appId = "appId";  // 需修改
        CCPRestSmsSDK sdk = new CCPRestSmsSDK();
        sdk.init(serverIp, serverPort);
        sdk.setAccount(accountSId, accountToken);
        sdk.setAppId(appId);
        sdk.setBodyType(BodyType.Type_JSON);
        // 多个号码之间用英文逗号隔开,号码数不超过 200 个
        String to = "139xxxxxxx,178xxxxxxx";
        // 模板id,官网控制台模板列表获取。测试模板写死是 1
        String templateId = "1";
        String code = generateCode();
        // datas 用于替换短信模板中的值,可以定义多个。这里替换模板中的 验证码 和 有效时间
        String[] datas = {code, "3"};
        // subAppend 扩展码,可选,四位数字 0~9999,具体用处尚不明确,建议注释
        // String subAppend = "1234";
        // reqId 第三方自定义消息id,可选,最大支持32位英文数字,同账号下同一自然天内不允许重复,建议注释
        // String reqId = "fadfafas";
        // HashMap<String, Object> result = sdk.sendTemplateSMS(to, templateId, datas, subAppend, reqId);
        HashMap<String, Object> result = sdk.sendTemplateSMS(to, templateId, datas);
        if ("000000".equals(result.get("statusCode"))) {
            //正常返回输出data包体信息(map)
            HashMap<String, Object> data = (HashMap<String, Object>) result.get("data");
            Set<String> keySet = data.keySet();
            for (String key : keySet) {
                Object object = data.get(key);
                System.out.println(key + " = " + object);
            }
        } else {
            //异常返回输出错误码和错误信息
            System.out.println("错误码=" + result.get("statusCode") + " 错误信息= " + result.get("statusMsg"));
        }
    }

}

maven依赖

		<dependency>
            <groupId>com.cloopen</groupId>
            <artifactId>java-sms-sdk</artifactId>
            <version>1.0.3</version>
        </dependency>

最终效果

请添加图片描述

问题

在发送短信的过程中,如果出现如下问题:
在这里插入图片描述
那么就是你可能用了 HashMap<String, Object> result = sdk.sendTemplateSMS(to, templateId, datas, subAppend, reqId); 五参的方法,这里 reqId 一天之内不能重复,建议使用三参的方法。

如果有如下问题:
在这里插入图片描述
那么请将 gson 的依赖升级下,我用的是如下版本,亲测有效:

		<dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>

如果还有其他问题,欢迎大家一起讨论!

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java实现手机热点开启功能,需要使用Android SDK中的WifiManager和ConnectivityManager类。 以下是一个简单的示例代码: ```java private void enableHotspot() { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 检查是否支持热点 if (wifiManager.isWifiApEnabled()) { return; // 已经开启热点,直接返回 } // 开启热点 WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "Hotspot"; // 设置热点名称 wifiConfiguration.preSharedKey = "12345678"; // 设置密码 wifiConfiguration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); try { Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method.invoke(wifiManager, wifiConfiguration, true); } catch (Exception e) { e.printStackTrace(); } // 禁用数据网络 connectivityManager.setMobileDataEnabled(false); } private void disableHotspot() { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 关闭热点 try { Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method.invoke(wifiManager, null, false); } catch (Exception e) { e.printStackTrace(); } // 启用数据网络 connectivityManager.setMobileDataEnabled(true); } ``` 注意:需要在AndroidManifest.xml中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值