首页 文章 精选 留言 我的

精选列表

搜索[开放计算项目],共10018篇文章
优秀的个人博客,低调大师

开放平台:StackMob for iOS

引言: StackMob 是一个轻量级的 Baas 移动后端云存储平台. 为移动App提供了强大的后台云存储能力,其SDK架接在Core Data身上,在不改变Core Data API 使用方式的前提下为Core Data 提供云端存储的能力,此篇专门介绍了StackMob在 iOS环境的使用方式. 参考资料: 1:StackMob 的主页 https://www.stackmob.com/ 2:StackMob iOS开发文档 http://stackmob.github.io/stackmob-ios-sdk/ 3:如何为iOS应用及游戏添加后台网络服务系列1 前言 http://blog.sina.com.cn/s/blog_4b55f6860101b991.html 4:StackMob SDK 官方使用教程 https://developer.stackmob.com/tutorials/ios 5:16小时的诱惑大致的介绍了StackMob从注册到使用的整个过程: http://www.csdn.net/article/2013-03-19/2814542-build-an-airbnb-clone/1 安装: StackMob是开源的,托管地址如下: https://github.com/stackmob/stackmob-ios-sdk 安装的首先方式是CocoaPods. 可能遇到的问题: 1:解决AFNetworkKiting 安装后警告部署问题,详见这篇文章 2:解决Reachability 类 的冲突问题,代码如下: 3:让 StackMob连接至 Amazon S3 云存储服务 StackMob需要连接 Amazon S3 以后才拥有二进制文件的存储能力. 本篇博文大致的介绍了一下S3的注册流程,可以稍作参考: http://www.xieyidian.com/2692 第一步:前往亚马逊Web Services 注册一个开发者账号: https://aws.amazon.com/cn/ 第二步:注册并激活 S3 https://aws.amazon.com/cn/s3/ 注册并激活S3需要一张支持外币付费的信用卡,建议使用万事达卡. 在索要卡片的界面填写如下: 类型选择:MasterCard 信用卡卡号 持卡人 拼音名称. (按照信用卡上面填写) 成功以后会扣费一美元. 并收到开通S3服务的邮件提醒. 此时便已经开通了S3的服务,拥有了使用的权利,如果此时进入S3的控制台依旧提示你需要注册的话,是浏览器缓存的问题,清空即可. 第三步:进入 S3的管理控制台 创建一个Bucket 如下图: https://console.aws.amazon.com/s3 Region 选择服务器所在的国家,里咱越紧越好. 日本吧 第四步:摘用StackMob官方的连接教程,基本上就搞定了: http://developer.stackmob.com/tutorials/dashboard/Adding-a-Binary-Field-to-Schemas 在配置最后一步的链接时有一个字段要特别注意,如下图所示: 那就是S3 Path Alias 这个字段的值在设置不对的情况下去使用它生成的访问链接,访问的结果始终是下图中的错误: 如何才能正确设置S3 Path Alias? 首先要了解S3 Path Alias到底是做什么用的,它一个链接地址别名 当我们用StackMob上传一个二进制文件成功以后,StackMob会自动根据S3 Path Alias所给定的值自动生成一个完整的二进制文件下载链接. 如何检验这个下载链接的正确性,我们可以前往S3的控制台,随便找一个已经上传成功的文件,查看其详细信息,如下图所示: 拿图中的Link和StackMob所生成的链接进行对比,看看有哪里不一样了. 如果不一样,那么S3 Path Alias的设置肯定有问题. 从上图来说,正确的S3 Path Alias设置方法应该是: http://s3-ap-northeast-1.amazonaws.com/musicpushtest/ 最后S3的定价情况地址如下:(新用户注册免费12个月): http://aws.amazon.com/cn/pricing/s3/ 使用: 不足之处: 1:没有二进制文件上传进度 原因:求解决 2:多次发起查询请求和保存请求,都有可能产生Crash, 原因: 由于线程调用错乱 导致StackMob停止工作甚至Crash,使用前,请熟悉GCD,可以参考这篇教程. 这篇更全面 3:查询和保存请求发起后,无法立刻撤销,必须等待整个请求完成 原因:求解决 4:分页查询起始索引默认必需设置值大于0 才有效果: 原因:我估计代码内部BUG,注释掉 判断大于0 即可修正 5:查询一对多的对象以后在缓存到本地时,写入指定Plist文件时Crash 原因:NSDictionary的key 不是 NSString 所致, 修改了源代码 替换键值对的方法. 6:利用对象层级展开以后,却无法获取子对象数据 原因:求解决 功能要点: 一:关于二进制文件上传 1.设置Core Data 数据模型的字段为字符串类型. 2.手动设置StackMob 的Schema 里对应的字段为二进制类型. 3.本地数据模型的字段名称和StackMob 的 Schema 的字段名称 关系如下:本地Core Data: userIcon Schema :user_icon 4.如果本地某个字段 对应着服务器的某个二进制字段时,就在上传服务器时必须通过如下代码赋值: + (NSString *)convertUploadWithPath:(NSString *)aPath withContentType:(NSString *)aContentType { NSData *data = [NSData dataWithContentsOfFile:aPath]; if (data) { NSString *dataString = [SMBinaryDataConversion stringForBinaryData:data name:[aPath lastPathComponent] contentType:aContentType]; return dataString; }else { return @"file?"; } } 注:任何其他方式的赋值都不允许,否则会出现让人无法理解的BUG.(特别注意) 上传成功的二进制文件字段需要通过执行以下代码才能获取二进制文件的下载链接 [[StackMobManager contextForCurrentThread] refreshObject:self.dmSongTyoe mergeChanges:YES]; 但是这个只对 新增的对象启效果,如果你是 更新对象使用上面的代码刷新的话,会变回你之前修改的值. 那又怎么解决呢? 二:数据缓存机制 StackMob的缓存机制默认是关闭的,如果要开启,需要对以下全局变量赋值: SM_CACHE_ENABLED = YES; 设置以后, StackMob会自动创建一个本地 Core Data数据库自动管理和缓存来自服务器的数据. 针对查询数据机制有一个枚举来决定其取数方式: typedef enum { SMCachePolicyTryNetworkOnly = 0,//只从网络取 SMCachePolicyTryCacheOnly = 1, //只从缓存取 SMCachePolicyTryNetworkElseCache = 2,//先从网络取,取不到用缓存替代 SMCachePolicyTryCacheElseNetwork = 3,//这个还没研究过 } SMCachePolicy; 如果用户更改了设备的网络环境,可以通过以下Block去修改查询数据机制: SMClient *client = [[SMClient alloc] initWithAPIVersion:@"0" publicKey:@"XXXX"]; SMCoreDataStore *coreDataStore = [client coreDataStoreWithManagedObjectModel:myModel]; [client.session.networkMonitor setNetworkStatusChangeBlockWithCachePolicyReturn:^SMCachePolicy(SMNetworkStatus status) { if (status == Reachable) { return SMCachePolicyTryNetworkElseCache; } else { return SMCachePolicyTryCacheOnly; } }]; 那么在App启动的时候,判断一下当前的网络环境,设置好查询数据机制: if ([Reachability isEnable3G] || [Reachability isEnableWIFI]) { [self.keyCoreDataStore setCachePolicy:SMCachePolicyTryNetworkElseCache]; }else { [self.keyCoreDataStore setCachePolicy:SMCachePolicyTryCacheOnly]; } 三:关于保存(saveOnSuccess) 对Object的任何增删改都通过saveOnSuccess来保持云端的数据同步. 用起来蛮简单,不过也有些小细节要注意,否则也非常纠结. 1.saveOnSuccess因为一些网络原因或者保存重复主键等问题导致保存失败,会进入失败的Block. 如果连续进入三,四次左右的失败Block,它~~~~~ 它~丫的~ App就Crash了. 卧槽... 什么@try @catch 全都挡不住这个崩溃. 解决办法是在失败的Block里面执行Core Data上下文删除刚刚需要保存的对象的操作. [StackMobManager contextForCurrentThread] deleteObject:obj];这样不管你点多少次都不会 Crash了,我觉得这是 StackMob设计上的一些不足,不够我也是菜鸟,不能够做多评论. 2.Updating passwords via this API is disabled for security reasons. Use the resetPassword API instead 这个提示通过控制台打印过来,大意是说你当前的保存数据请求被云端给限制了. 我是怎么触发这个Error的? 当我发起创建一个新User对象的同时,再多保存了一个File对象.File对象依赖于User对象,也就是说File对象的所有权是User对象的,但是你创建User对象的时候,你并没有登录. 处于授权安全机制,本次保存请求就算是失败,(即使数据已经保存到了云端). 解决办法是不要急着一起次保存到云端,只有等登录成功以后,再去发起File对象的保存请求即可. 四:关于查询(executeFetchRequest) 对Object的查询就靠这个函数了,基本雷同CoreData的查询函数,StackMob提供两种发起查询请求的方式. 一种是内部构建多线程运作工作,不会卡住主线程和影响界面,完成后通过主线程告知: 但是,连续多次发起这种请求方式, 有极高的几率导致整个SDK停止工作. 这是个比较严重的问题,应该是StackMob 的BUG, 另外一种则是不构建多线程,如果直接执行,在没返回结果之前会卡住主线程,影响界面体验,但是我们可以自己使用GCD来避免主线程阻塞的这个问题 用这种方式似乎可以避免多次发起请求所产生的BUG,至少暂时没发现. 在发起查询请求之前有一个参数类要特别的注意一下,这个类也是实现个性化查询的一个重要途径之一, 它是SMRequestOptions 它有什么用: 1:是否要求刷新Token? tryRefreshToken 2:以HTPPS加密的方式安全获取数据? isSecure 3:当请求网络超时时,重试几次呢?numberOfRetries 4:返回的数据结构需要展开几个层次?(最多三级) setExpandDepth 5:只是想返回某几个字段的数据而已 restrictReturnedFieldsTo 总结:

优秀的个人博客,低调大师

开放平台:Parse for iOS

引言: Parse一款基于Baas的后端云存储服务平台,为开发者提供云端数据存储和读取的能力,Parse团队在其SDK方面花费了大功夫,实现了很多非常有用的功能.并且,非常的稳定,兼容和灵活性,相对于其他Baas平台,Parse在上手方面是最为容易的. Parse的特性如下: 1:自定义数据字典 2:消息推送 3:地理位置 4:数据缓存 5:离线数据同步 6:云端自定义代码 7:二进制文件读取 参考资料: 1:Parse的主页 https://www.parse.com 2: 安装: 1.首选的安装方式是跟着Parse自家提供的官方起步教程即可完成,非常简单! 2.也可以用 CocoPods,只是SDK太肥了,而且装的话,还会有一个 Facebook SDK的依赖. 使用: Parse支持的数据类型主要如下: Number: 对应各种类型,包括:整形,浮点型 转换成NSNumber后存储到Parse Cloud Date: 对应NSDate Array:对应NSArray. 万能的数组(Parse的强大之处) String:对应NSString Null: 很少用到 Pointer: 指针:相当于表与表之间的外键关系, 只存储着某个对象的ID Relation:关系:应付多对多关系时的方案,但是可以用Array达到同意的功能. 查询: Parse设定了尽可能多样的查询方式,并且它还支持NSPredicate. 这对于使用过CoreData的人来说,是比较容易上手的. 首先来说说Parse提供哪些查询接口 时间: 查询创建时间大于某个时间的数据行: NSDate *lastQueryDate = [self lastQueryTime]; if (lastQueryDate == nil) { lastQueryDate = [NSDate date]; } [query whereKey:@"createdAt" greaterThan:lastQueryDate]; 查询缓存策略: kPFCachePolicyIgnoreCache查询不从缓存加载结果或将结果保存到缓存。默认缓存策略为 kPFCachePolicyIgnoreCache。kPFCachePolicyCacheOnly查询会忽略网络,仅从缓存加载结果。如果没有缓存的结果,则会引发 PFError。kPFCachePolicyNetworkOnly查询不从缓存加载结果,但会将结果保存到缓存。kPFCachePolicyCacheElseNetwork查询首先尝试从缓存加载结果,但如果加载失败则从网络加载结果。如果缓存和网络加载都不成功,则会出现 PFError。kPFCachePolicyNetworkElseCache查询首先尝试从网络加载结果,但如果加载失败则从缓存加载结果。如果网络和缓存加载都不成功,则会出现 PFError。kPFCachePolicyCacheThenNetwork查询首先从缓存加载结果,然后再从网络加载。在此情况下,实际上会调用两次回调 - 第一次针对缓存的结果,随后针对网络结果。由于会在不同的时间返回两个结果,因此该缓存策略不能与 findObjects 同时使用。 Push: 官方提供了一个详细的消息推送配置流程: https://parse.com/tutorials/ios-push-notifications Parse远程推送教程实在是太详细了,图文并茂. 在这里我简单复述了一下整个过程方便理解: 1.申请苹果的开发者招生计划,并成功激活. 2.通过本地的Mac系统生成一个证书签名请求(Certificate Signing Request), 3:接下去苹果开发者主页的Member Center(会员中心)创建一个新的App IDs. 并通过证书签名请求激活这个App IDs的远程推送服务功能. 4.下载这个App IDs的推送许可服务,并通过钥匙访问串导出密匙(p12). 5.最后生成这个App IDs的描述文件,并应用到工程中. 6.编写Parse所提供的Push的相关API代码. 实现远程消息推送. 其中有一个步骤是当你通过Certificate Signing Request(证书签名请求)激活了苹果的远程推送通知服务以后. 并下载了推送许可证书:aps_development.cer. 教程中要求从钥匙访问串(Keychain Access)中导出.p12后缀的密匙. 在导出时有两点需要注意: 1:请在名称为 Apple Development IOS Push Services : ***** 或Apple Prodoction IOS Push Services : ***** 的栏位上直接右键,如下图: 图中方框中的三角箭头,请直接无视和忽略他。 里面是证书的创建者信息而已。 虽然也可以导出p12, 但是这个p12是无效(请特别注意) 2:在导出时要求你输入密码,请直接忽视,也就是空密码即可,否则Parse 的 App Settings - Push Notifications里要求上传的p12密匙无法成功. 最后还有一个细节要注意,也就是当你的产品成功发布到应用商店以后,你之前用来测试的开发版本证书,应该替换为发布版本证书(aps_production.cer). 否则从App Store上面下载的应用将无法收到消息推送.. 所以,你需要重新上传发布版本的密匙.跟开发版本的上传方式一样. 成功后如下图所示: 总结: 可能遇到的问题: 1:编译问题. 解决方案: http://stackoverflow.com/questions/15457136/parse-for-ios-errors-when-trying-to-run-the-app

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册