Unity 阿里云 之 SMS短信服务功能接入实现
目录
一、简介和目的
短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力。
支持国内和国际快速发送验证码、短信通知和推广短信,服务范围覆盖全球200多个国家和地区。
短信服务功能可以在账号登陆的时候进行验证;或者后期修改密码,进行修改验证;更方便的可以在游戏后期进行一些推广使用。
二、实现要点
1、在阿里云开发工具包(SDK)下载 SDK核心库 dll(aliyun-net-sdk-Core.dll),引入Unity
https://develop.aliyun.com/tools/sdk?spm=a2c4g.11186623.2.13.ac463854vV2vlZ#/dotnet
2、在短信服务中添加 签名管理 和 模板管理 内容
3、申请阿里云 AccessKey
4、关键代码
void SendSMS(string phone,string code) {
IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
DefaultAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.Method = MethodType.POST;
request.Domain = "dysmsapi.aliyuncs.com";
request.Version = "2017-05-25";
request.Action = "SendSms";
// request.Protocol = ProtocolType.HTTP;
request.AddQueryParameters("PhoneNumbers", phone);
request.AddQueryParameters("SignName", "xan游");
request.AddQueryParameters("TemplateCode", "SMS_177551456");
request.AddQueryParameters("TemplateParam", "{'code':'"+code+"'}");
try
{
CommonResponse response = client.GetCommonResponse(request);
Debug.Log(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (ServerException e)
{
print(e);
}
catch (ClientException e)
{
print(e);
}
}
5、数据返回结果
{
"Message": "OK",
"RequestId": "873043ac-bcda-44db-9052-2e204c6ed20f",
"BizId": "607300000000000000^0",
"Code": "OK"
}
三、使用注意
1、注意:这里好像要买套餐,不然手机接收不到信息,调用短信服务功能的时候,可能会返回结果是 账号余额不足
2、注意:aliyun-net-sdk-Core.dll 好像是 .Net 4.x Equivalent ,如果需要,把Unity的 Player Settings 的 other 中修改为对应的版本
四、实现步骤
1、登陆阿里云网站,找到短信服务功能
2、在短信服务中,进入 管理控制平台
3、添加签名管理
4、添加 模板管理
5、上面的 签名 和 模板 审核通过之后,可以在快速学习中测试一下
(注意:这里好像要买套餐,不然手机接收不到信息,返回结果是 账号余额不足)
6、测试OK ,可以查看 代码,Unity的为 .Net,当然这里也可以测试-发起调用
(注意:这里好像要买套餐,不然手机接收不到信息,返回结果是 账号余额不足)
7、在 网址 https://develop.aliyun.com/tools/sdk?spm=a2c4g.11186623.2.13.ac463854vV2vlZ#/dotnet
下载 SDK核心库 dll 插件
8、对了,如果没有 AccessKey ,记得申请一个
9、把 SDK核心库 aliyun-net-sdk-Core.dll 引入 Unity,并且 简单的布局短信服务UI
(注意:aliyun-net-sdk-Core.dll 好像是 .Net 4.x Equivalent ,如果需要,把Unity的 Player Settings 的 other 中修改为对应的版本)
10、新建脚本,编写代码,关键代码 就是第 6 步那里获取,并把自己的 AccessKey 对应添加进代码中
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Http;
using UnityEngine.UI;
public class AliyunSMS : MonoBehaviour
{
public InputField phone_ipt;
public InputField code_ipt;
public Button getCode_btn;
public Button code_btn;
private string phone;
private string code;
// Start is called before the first frame update
void Start()
{
// 输入手机号,获取验证码
getCode_btn.onClick.AddListener(()=> {
if (String.IsNullOrEmpty(phone_ipt.text)) {
Debug.Log("请确认手机号码");
return;
}
// 电话号码
phone = phone_ipt.text;
// 生成验证码
int ran = UnityEngine.Random.Range(100000, 999999);
code = ran.ToString();
SendSMS(phone, code);
});
// 验证输入是否正确
code_btn.onClick.AddListener(()=> {
if (String.IsNullOrEmpty(code_ipt.text))
{
Debug.Log("请确认验证码");
return;
}
if (code_ipt.text.Equals(code))
{
Debug.Log("验证码输入正确");
}
else {
Debug.Log("验证码输入错误");
}
});
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 验证码发送到手机
/// </summary>
/// <param name="phone"></param>
/// <param name="code"></param>
void SendSMS(string phone,string code) {
IClientProfile profile = DefaultProfile.GetProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"");
DefaultAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.Method = MethodType.POST;
request.Domain = "dysmsapi.aliyuncs.com";
request.Version = "2017-05-25";
request.Action = "SendSms";
// request.Protocol = ProtocolType.HTTP;
request.AddQueryParameters("PhoneNumbers", phone);
request.AddQueryParameters("SignName", "xan游");
request.AddQueryParameters("TemplateCode", "SMS_177551456");
request.AddQueryParameters("TemplateParam", "{'code':'"+code+"'}");
try
{
CommonResponse response = client.GetCommonResponse(request);
Debug.Log(System.Text.Encoding.Default.GetString(response.HttpResponse.Content));
}
catch (ServerException e)
{
print(e);
}
catch (ClientException e)
{
print(e);
}
}
}
11、运行场景