Android接入阿里云短信服务最全解析(包含demo)

删除回忆录丶 提交于 2020-08-15 07:08:39

阿里云短信服务真是太坑了把 ,,,,,,
老铁们 我太难了

昨天接到需求需要将阿里云的短信服务接入到软件中进行登陆验证
在这里插入图片描述
我用的是阿里云的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~

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!