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

使用 Microsoft Tag API

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.68/5 (15投票s)

2010年4月16日

CPOL

4分钟阅读

viewsIcon

34278

本文介绍了如何使用 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 并填写下面的表单。

1.jpg

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

首先,让我们将 Web 服务引用添加到我们的应用程序中。

2.jpg

现在,我们将深入了解如何调用 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 类型的实例。这些类型可以是 DialerTagFreetextTagVCardtag 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
Tag3.jpg
DecorationType.HCCBRP_DECORATION_DOWNLOAD
Tag4.jpg
DecorationType.HCCBRP_DECORATION_FRAMEPLAIN
Tag5.jpg
DecorationType.HCCBRP_DECORATION_NONE
Tag6.jpg

联系方式

如有任何错误报告和建议,请随时通过 oztamer@hotmail.com 与我联系。

历史

  • 2010 年 4 月 16 日:初始帖子
© . All rights reserved.