阿里云短信服务真是太坑了把 ,,,,,,
老铁们 我太难了
昨天接到需求需要将阿里云的短信服务接入到软件中进行登陆验证
我用的是阿里云的javaSDK,因为这里我用的是androidstudio所以我直接选择使用添加jar包的方式来继承(噩梦开始的地方)
AndroidStudio添加jar包方式
找到我们的libs目录 将我们下载好的sdk复制到该目录下
然后在我们的gradle app中的Android中添加
sourceSets{
main{
jniLibs.srcDirs=['libs']
}
}
这样我们的目录下就会显示
说明添加成功
添加依赖
点击ok然后我们的gradle中就会多一句依赖 就说明我们添加成功了
ok依赖添加完成 让我们来一步步实现短信功能
然后就是我们的测试代码块
首先是阿里云提供的代码块:
然后就是我们的代码块
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
final IAcsClient client = new DefaultAcsClient(profile);
//构建请求
final CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
//自定义参数->手机号、验证码、签名、模板
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "you phonenumber");
request.putQueryParameter("SignName", "签名");
request.putQueryParameter("TemplateCode", "短信模板");
HashMap<String,Object> map = new HashMap<>();
map.put("code","2233");
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
try {
CommonResponse response = client.getCommonResponse(request);
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
当我第一次运行时 ,意料之中 崩溃了
报未找到这个类
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/gson/JsonParser;
然后我百度了一个 是一个json解析数据的工具
解决方法:
buildgradle中添加了json依赖
implementation 'com.google.code.gson:gson:2.8.6'
扩展 :想要使用JSONObject.toJSONString(map)方法需要添加依赖
implementation 'com.alibaba:fastjson:1.1.71.android'
然后当我再次运行时又报错
又说类找不到
然后这里需要添加javax.xml.bind.jar包的依赖
当我再次运行时 还是报错 。。。。
然后又报一个类找不到 然后经过百度才发现是还需要添加一个xercesImpl.jar包 才可以 终于终于可以了
这里是最终需要的jar包
所需要的jar包都上传到我上传的资源中了 需要的可以直接去下载压缩包
我最终的代码:
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.clicked);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
final IAcsClient client = new DefaultAcsClient(profile);
//构建请求
final CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
//自定义参数->手机号、验证码、签名、模板
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", "you phonenumber");
request.putQueryParameter("SignName", "签名");
request.putQueryParameter("TemplateCode", "短信模板");
HashMap<String,Object> map = new HashMap<>();
map.put("code","2233");
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map));
new Thread(new Runnable(){
@Override
public void run() {
try {
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
Log.i("ssssss","@"+response.getData());
} catch (ServerException e) {
Log.i("wokankna","@"+e.toString());
e.printStackTrace();
} catch (ClientException e) {
Log.i("wochouhou","@"+e.toString());
e.printStackTrace();
}
}
}).start();
}
});
}
}
需要的依赖
implementation 'com.alibaba:fastjson:1.1.71.android'
implementation 'com.google.code.gson:gson:2.8.6'
Android9.0 默认是禁止所有的http
请求的,需要在代码中设置如下代码才可以正常进行网络请求: android:usesCleartextTraffic=“true”。
Manifest文件:
欧克 这就结束了 发送一下 看看效果:
这就完成咯 有什么不懂得可以私信我或者评论 看到我都会一一解答得
如果对你有用 记得点赞哟 爱你 mua~