使用 Android 手机的 SMS 网关
将您的 Android 手机变成短信网关,通过 RESTful 服务发送和接收短信
引言
随着互联网和各种移动消息应用程序的普及,现在人们可以通过许多渠道进行通信,例如电子邮件、WhatsApp、LINE、微信、Facebook Messenger、Skype、Telegram 等。然而,由于其可靠性,短信仍然很重要。 在本文中,我们将通过安装一个免费的应用程序将 Android 手机变成短信网关,并开始通过 C# 或您喜欢的任何其他编程语言发送和接收短信。
背景
我开发这个解决方案是为了将其与我的其他产品(MessagingToolkit)捆绑在一起。 这个免费的 Android 应用程序现在可以在 Google Play 商店 上找到。
当然,还有其他类似的解决方案可用,只需在 Google 上搜索“Android 短信网关”,您就可以看到所有其他可用选项。
声明:我是 myMobKit 和 MessagingToolkit 的开发者。
使用代码
为了将您的 Android 手机变成短信网关,您需要安装在 Google Play 商店 上可用的免费应用程序 myMobKit。
安装后,启动控制面板服务,您应该能够看到访问托管网站的 URL。
托管网站显示可用的 API 及其用法。 您可以使用 API 访问设备信息、照片和视频,以及发送和接收短信。
为了快速入门,您可以使用 Chrome 扩展程序,例如 Advanced REST Client 或 Postman - REST Client 来访问消息服务。 以下是 Advanced REST Client 检索手机中所有短信的屏幕截图。
使用 C# 访问 API 使用 ASP.NET Web API 客户端库非常简单。
在 Visual Studio 中,从 工具 菜单中,选择 库包管理器,然后选择 包管理器控制台。
在 包管理器控制台 窗口中,输入以下命令
Install-Package Microsoft.AspNet.WebApi.Client
要检索手机中的所有消息,请使用以下代码片段。
using (var client = new HttpClient())
{
string url = ConstructBaseUri();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (!string.IsNullOrEmpty(txtUserName.Text) && !string.IsNullOrEmpty(txtPassword.Text))
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(
ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", txtUserName.Text, txtPassword.Text))));
}
HttpResponseMessage response = await client.GetAsync(MessagesUrlPath);
if (response.IsSuccessStatusCode)
{
GetMessageResponse result = await response.Content.ReadAsAsync<GetMessageResponse>();
if (result.IsSuccessful)
{
txtOutput.Clear();
foreach (DeviceMessage msg in result.Messages)
{
AddToOutput(msg.ToString());
AddToOutput("");
}
}
else
{
MessageBox.Show(result.Description, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show(response.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
要发送消息,请使用以下代码片段,
using (var client = new HttpClient())
{
string url = ConstructBaseUri();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (!string.IsNullOrEmpty(txtUserName.Text) && !string.IsNullOrEmpty(txtPassword.Text))
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(
ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", txtUserName.Text, txtPassword.Text))));
}
var postData = new List<KeyValuePair<string, string>>();
postData.Add(new KeyValuePair<string, string>("to", txtContact.Text));
postData.Add(new KeyValuePair<string, string>("message", txtMessage.Text));
HttpContent content = new FormUrlEncodedContent(postData);
HttpResponseMessage response = await client.PostAsync(MessagesUrlPath, content);
if (response.IsSuccessStatusCode)
{
PostMessageResponse result = await response.Content.ReadAsAsync<PostMessageResponse>();
if (result.IsSuccessful)
{
txtOutput.Clear();
}
else
{
MessageBox.Show(result.Description, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show(response.ToString(), Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
示例应用程序的截图。
历史
2014年12月29日 - 初始版本。