65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Android 手机的 SMS 网关

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (32投票s)

2014年12月29日

CPOL

2分钟阅读

viewsIcon

196125

downloadIcon

10900

将您的 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日 - 初始版本。

 

© . All rights reserved.