使用 Microsoft Tag API
本文介绍了如何使用 Microsoft Tag API。

引言
Microsoft Tag 是一种由微软开发的二维条形码。Microsoft Tag 的理念是通过手机读取标签并访问互联网上的信息。要实现这一点,您只需要一部带摄像头的手机,并下载可以在 http://gettag.mobi/ 上找到的 Tag 软件。Microsoft Tag 可以读取其他条形码阅读器无法读取的环境,例如显示器、电视。不久的将来,在名片、广告或超市中看到 Tag 标签也就不足为奇了。
Using the Code
由于 Microsoft Tag 还使用颜色来编码数据,因此它可以比典型的二维条形码存储更多信息。这些信息可以是网站地址、联系人卡片、文本或电话号码。当您扫描一个 Tag 时,您的手机默认浏览器将根据您扫描的 Tag 类型打开一个网站、将联系人添加到您的通讯录、显示短信或拨打一个号码。此外,所有这些信息都可以通过使用密码进行保护,并且可以在 Tag 的发布者确定的有效期内访问。
要使用 Microsoft Tag,您应该访问并注册 http://tag.microsoft.com。由于它具有用户友好的界面,我将主要介绍如何使用 API。
要使用 API,首先您应该访问 http://tag.microsoft.com/ws/accessrequest.aspx?wa=wsignin1.0 并填写下面的表单。

填写此表单并提交申请后,您将收到一封包含webservices地址和令牌的电子邮件。收到此邮件后,您就可以开始使用webservices了。我无法与您分享我的令牌,因此从这一点开始,我将假设令牌是“00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00”。
首先,让我们将 Web 服务引用添加到我们的应用程序中。

现在,我们将深入了解如何调用 Tag API。
创建新分类
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
TagService.Category insCategory = new MicrosoftTagAPISample.TagService.Category();
insCategory.Name = "Dummy_Category";
insCategory.UTCStartDate = DateTime.Now;
insCategory.UTCEndDate = DateTime.Now.AddDays(10);
bool result = insMIBPContractClient.CreateCategory(insUserCredential, insCategory);
if (result)
{
MessageBox.Show("Category Successfully Created");
}
else
{
MessageBox.Show("An Error Occurred While Creating Category");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
要使用 Microsoft Tag 的 API,首先您应该获取一个 MIBPContractClient
对象的实例。然后,我们应该通过将其分配给 UserCredential
对象的实例的 AccessToken
属性,在每次请求中发送令牌。要创建分类,我们应该创建一个 Category
对象的实例并为其属性分配适当的值。重要的一点是,如果我们不希望我们的分类过期,就不应该为 UTCEndDate
属性分配值。要创建分类,我们需要通过传递 Category
和 UserCredential
来调用 MIBPContractClient
对象的 CreateCategory
方法。此方法返回一个布尔值,表示分类创建是否成功。
更新分类
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
TagService.Category insCategory = new MicrosoftTagAPISample.TagService.Category();
insCategory.Name = "Dummy_Category_New";
insCategory.UTCStartDate = DateTime.Now;
insCategory.UTCEndDate = DateTime.Now.AddDays(10);
bool result = insMIBPContractClient.UpdateCategory
(insUserCredential,"Dummy_Category", insCategory);
if (result)
{
MessageBox.Show("Category Successfully Updated");
}
else
{
MessageBox.Show("An Error Occurred While Updating Category");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
更新分类的逻辑与创建分类相同。重要的是,您还应该将要更新的分类的当前名称作为参数传递给 MIBPContractClient
对象的 UpdateCategory
方法,以及 Category
和 UserCredential
。
使分类变为无效或有效
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
bool result = insMIBPContractClient.PauseCategory
(insUserCredential, "Dummy_Category_New");
if (result)
{
MessageBox.Show("Category Successfully Paused");
}
else
{
MessageBox.Show("An Error Occurred While Pausing Category");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
bool result = insMIBPContractClient.ActivateCategory
(insUserCredential, "Dummy_Category_New");
if (result)
{
MessageBox.Show("Category Successfully Activated");
}
else
{
MessageBox.Show("An Error Occurred While Activating Category");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
您应该将分类名称和 UserCredentials
传递给 MIBPContractClient
对象的 PauseCategory
或 ActivateCategory
方法。
创建新 Tag
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
TagService.URITag insURITag =
new MicrosoftTagAPISample.TagService.URITag();//DialerTag,
//FreeTextTag, VCardTag
insURITag.Title = "New_URI_Tag";
insURITag.MedFiUrl = "http://www.tameroz.com";
insURITag.UTCStartDate = DateTime.Now;
insURITag.UTCEndDate = DateTime.Now.AddDays(10);
bool result = insMIBPContractClient.CreateTag
(insUserCredential, "Dummy_Category_New", insURITag);
if (result)
{
MessageBox.Show("Tag Successfully Created");
}
else
{
MessageBox.Show("An Error Occurred While Creating Tag");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
要创建 Tag,我们应该创建我们将要创建的 Tag 类型的实例。这些类型可以是 DialerTag
、FreetextTag
、VCardtag
或 URITag
。在填写我们创建的对象的相应属性后,我们应该通过传递 UserCredential
对象、要创建的 Tag 的 Category
名称以及我们创建的 Tag 对象来调用 MIBPContractClient
对象的 CreateTag
方法。同样,与创建分类一样,如果我们不希望我们的 Tag 过期,就不应该为 UTCEndDate
属性分配值。
更新 Tag
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
TagService.URITag insURITag =
new MicrosoftTagAPISample.TagService.URITag();//DialerTag,
//FreeTextTag, VCardTag
insURITag.Title = "New_URI_Tag";
insURITag.MedFiUrl = "http://www.tameroz.com";
insURITag.UTCStartDate = DateTime.Now;
insURITag.UTCEndDate = DateTime.Now.AddDays(10);
bool result = insMIBPContractClient.UpdateTag
(insUserCredential, "Dummy_Category_New", "New_URI_Tag", insURITag);
if (result)
{
MessageBox.Show("Tag Successfully Updated");
}
else
{
MessageBox.Show("An Error Occurred While Updating Tag");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
更新 Tag 的逻辑与创建 Tag 相同。重要的是,您还应该将要更新的 Tag 的当前名称作为参数传递给 MIBPContractClient
对象的 UpdateTag
方法,以及 Tag
对象本身和 UserCredential
。
使 Tag 变为无效或有效
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
bool result = insMIBPContractClient.PauseTag
(insUserCredential, "Dummy_Category_New", "New_URI_Tag");
if (result)
{
MessageBox.Show("Tag Successfully Paused");
}
else
{
MessageBox.Show("An Error Occurred While Pausing Tag");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
bool result = insMIBPContractClient.ActivateTag
(insUserCredential, "Dummy_Category_New", "New_URI_Tag");
if (result)
{
MessageBox.Show("Tag Successfully Activated");
}
else
{
MessageBox.Show("An Error Occurred While Activating Tag");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
您应该将 Tag 名称和 UserCredentials
传递给 MIBPContractClient
对象的 PauseTag
或 ActivateTag
方法。
在 Windows 应用程序中显示 Tag
try
{
TagService.MIBPContractClient insMIBPContractClient =
new MicrosoftTagAPISample.TagService.MIBPContractClient();
TagService.UserCredential insUserCredential =
new MicrosoftTagAPISample.TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
byte[] b=insMIBPContractClient.GetBarcode
(insUserCredential, "Main", "Tamer Vcard",
MicrosoftTagAPISample.TagService.ImageTypes.jpeg, 2,
MicrosoftTagAPISample.TagService.DecorationType.HCCBRP_DECORATION_FRAMEPLAIN,
false);
MemoryStream ms = new MemoryStream(b);
Image i=Image.FromStream(ms);
PictureBox pb = new PictureBox();
pb.SizeMode = PictureBoxSizeMode.Zoom;
this.Controls.Add(pb);
pb.Dock = DockStyle.Fill;
pb.Image = i;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
要使用 API 获取 Tag 图像,我们可以使用 MIBPContractClient
对象的 GetBarcode
方法。此方法接受 UserCredential
对象、Tag 所属的分类名称、Tag 名称、要生成的图像类型(例如 JPG、GIF、PDF、PNG 等)、Tag 的大小(以英寸为单位)以及 Tag 的显示类型。我将在文章的最后给出一些显示类型的示例。
在 Web 应用程序中显示 Tag
try
{
Response.Clear();
TagService.MIBPContractClient insMIBPContractClient =
new TagService.MIBPContractClient();
TagService.UserCredential insUserCredential = new TagService.UserCredential();
insUserCredential.AccessToken = "00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00";
byte[] b = insMIBPContractClient.GetBarcode
(insUserCredential, "Main", "Tamer Vcard", TagService.ImageTypes.jpeg,
2, TagService.DecorationType.HCCBRP_DECORATION_DOWNLOAD, false);
Response.BinaryWrite(b);
Response.ContentType = "Image/JPEG";
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
以下是一些关于 Tag 显示类型的示例。
DecorationType.HCCBENCODEFLAG_STYLIZED

DecorationType.HCCBRP_DECORATION_DOWNLOAD

DecorationType.HCCBRP_DECORATION_FRAMEPLAIN

DecorationType.HCCBRP_DECORATION_NONE

联系方式
如有任何错误报告和建议,请随时通过 oztamer@hotmail.com 与我联系。
历史
- 2010 年 4 月 16 日:初始帖子