Xamarin.iOS使用itunes信息检测版本更新


Xamarin.iOS使用itunes信息更新版本更新

xamarin.iOS


之前未了解苹果文档中提供了一份itunes网站的http接口api,利用这些api可以轻易的访问到itunes上app应用的信息,对推荐应用,版本信息描述等有所帮助,而不用通过自身平台的方式来提供接口。
做过的项目中,由于平台没有区分安卓与iOS更新机制的差异,而忽略了iOS应用的更新提醒功能,因此想到借助itunes开放api来获取信息。

1.官方相关文档

http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.htm

2.使用

1)api链接:http://itunes.apple.com/lookup?id=【你的应用程序的ID】

20141013152243538.jpg-13.5kB

2)根据应用ID来获取出来的是精确的信息,应用【yelp】的信息
http://itunes.apple.com/lookup?id=284910350
看看,json数据结构 ,使用System.Runtime.Serialization.Json解析json数据

20141013152302227.jpg-220.5kB

根据需要添加数据模型,以下代码:

  1. <span style="font-family:SimSun;">using System.IO;
  2. using System.Runtime.Serialization.Json;
  3. using System.Runtime.Serialization;
  4. using System.Text;
  5. using System.Collections.Generic;</span>
  6. [csharp] view plain copy
  7. //itunes信息数据结构
  8. [DataContract]
  9. public class AppResult
  10. {
  11. [DataMember (Name = "resultCount")]
  12. public string ResultCount{ get; set; }
  13. [DataMember (Name = "results")]
  14. public List<AppInfo> Info{ get; set; }
  15. }
  16. [DataContract]
  17. public class AppInfo
  18. {
  19. [DataMember (Name = "releaseNotes")]
  20. public string Content{ get; set; }
  21. [DataMember (Name = "version")]
  22. public string Version{ get; set; }
  23. [DataMember (Name = "trackName")]
  24. public string Name{ get; set; }
  25. }

3)字符版本比较
清楚应该获取哪个版本号来做版本对比,itunes上使用的是公开版本号,对应key为【CFBundleShortVersionString】,想了解两个版本
的区别,可看版本号管理

20141013152542908.jpg-114.3kB

简单的比对代码:

  1. public static bool HasNewVersion(string oldVersion,string newVersion)
  2. {
  3. try {
  4. if (!string.IsNullOrEmpty (newVersion) && newVersion.Length == 5) {
  5. float oldFloat = 0f,newFloat = 0f;
  6. float.TryParse(oldVersion.Replace(".",""),out oldFloat);
  7. float.TryParse(newVersion.Replace(".",""),out newFloat);
  8. if(newFloat > oldFloat){
  9. return true;
  10. }
  11. return false;
  12. } else {
  13. return false;
  14. }
  15. } catch (Exception ex) {
  16. Log.Error (ex.Message);
  17. return false;
  18. }
  19. }

4)访问Demo

  1. partial void UpdataButton_TouchUpInside (UIButton sender)
  2. {
  3. System.Threading.ThreadPool.QueueUserWorkItem ((s) => {
  4. //当前app版本【8.0.0】
  5. var oldVerison = NSBundle.MainBundle.InfoDictionary.ObjectForKey (
  6. new NSString ("CFBundleShortVersionString")).ToString ();
  7. //获取itunes上信息
  8. AppResult result = null;
  9. var url = "http://itunes.apple.com/lookup?id=284910350";
  10. var data = NSData.FromUrl (NSUrl.FromString (url));
  11. Console.WriteLine ("data" + data.ToString ());
  12. var serializer = new DataContractJsonSerializer (typeof(AppResult));
  13. using (var stream = new MemoryStream (Encoding.UTF8.GetBytes (data.ToString ()))) {
  14. result = (AppResult)serializer.ReadObject (stream);
  15. }
  16. this.InvokeOnMainThread (() => {
  17. try {
  18. if (result != null && result.Info != null && result.Info.Count > 0) {
  19. var model = result.Info [0];
  20. if(this.HasNewVersion(oldVerison,model.Version)){
  21. UIAlertView alertView = new UIAlertView (string.Format ("发现新版本(【Yelp】{0})", model.Version),
  22. model.Content, null, "关闭", "更新");
  23. alertView.Show ();
  24. alertView.Clicked += (obj, e) => {
  25. if (e.ButtonIndex == 1) {
  26. //应用地址
  27. }
  28. };
  29. }
  30. }
  31. } catch (Exception ex) {
  32. Console.WriteLine ("Error>>" + ex.Message);
  33. }
  34. });
  35. });
  36. }

20141013152759767.jpg-37.6kB

作者:zhaowensky_126
原文地址:http://blog.csdn.net/zhaowensky_126/article/details/40046113

分享到