作者:Jameson Quave,原文链接,原文日期:2016-2-2
译者:Crystal Sun;校对:numbbbbb;定稿:千叶知风

不知道你是否听说,Facebook 要关闭 Parse 了。Parse 是一个后端云服务(BaaS),前不久刚刚被 Facebook 收购。很多开发者感到有些失望,甚至感觉被 Facebook 背叛,我在推特发了这张 Parse 被关闭前网站首页截屏图片,它能说明一切:

图片链接
— Jameson Quave (@jquave) January 29,2016

不用我在这里额外强调,他们都在网站上说了。成千上万的开发者信任我们。可以从类似的描述中明白,为什么开发者觉得他们遭到了背叛。在明知 Facebook 会任意地关闭某项技术服务的情况下,还会有人使用 React Native、React JS、HHVM、Relay 等 Facebook 提供的技术服务吗?

确实,这些项目都是开源项目,开源社区可以接手,但是开源项目需要维护,而大公司的支持能够给项目带来更多好处。Facebook 的行为已经向我们证明,我们不能相信 Facebook。凡是与 Facebook 的 API 接口打过交道的人,或者处理过第三方社交媒体 API 接口的人,都不会对这个结论感到惊讶,我会在以后详细说说这一点。但是现在让我先暂时改变一下话题,来讨论一下另外一个大麻烦:Twitter……和更重要的Twitter Fabric,拥有 Crashlytics(应用崩溃报告服务商),整合了很多由Felixt Krause实现的令人惊艳的工作成果。

但是要理解 Twitter 在过去是如何对待开发者社区,我认为我们应该先说一说 Meerkat 应用。我保证之后会继续讨论 Parse 和 Facebook,Meerkat 的故事也是发生在同样的背景下,所以稍稍忍耐一下吧。

Meerkat

先介绍一下背景:我住在德克萨斯州的 Austin,这意味着在每年我都能在 SXSW 看到接下来将变成大公司的初创公司。Twitter、Foursquare、GameSalad,甚至连 Four-Hour Work Week 都是 SXSW 孵化的项目。这都是一些成功项目,每年有无数天真的创业者来到 Austin 展示他们的项目,希望能够获得投资。在 2015 年,赢家是一个名为 Meerkat 的项目。

Meerkat 是一个实时流媒体直播的 P2P 平台,用户可以用 iPhone 直接把流媒体视频展示给其他用户观看,这在 SXSW 掀起了一场风暴。去年只要你在 Austin 走走,经过 SXSW,到处都能看到 Meerkat 的 T 恤衫,每一个人都在现场直播音乐、SXSW 的课程、午饭或者任何人们正在做的事情。突然间,Meerkat 停止了服务,原因是:

随着 Meerkat 的下载量持续攀升,Twitter 在发出通知的两个小时后,就关闭了 Meerkat 访问 Twitter 的接口。

如果你熟悉 iOS 应用商店审核过程,也许你就能意识到问题所在了。即使 Meerkat 的人能够重新写他们的应用代码,来不去使用 Twitter 的 API 接口,他们也无法在 2 小时内把最新的 App 更新到苹果应用商店中,实际上,需要至少 3 周的时间才能更新上去。

我实际上并没有感到惊讶,但是好多人不理解 Twitter 为什么要做这样的事情,Twitter 是否违反了 API 条款?属于违法行为吗?

实际上,没有违反条款,也没有违法……

Twitter 关闭了 Meerkat,因为 Twitter 自己开发了一个应用叫 Periscope,是 Meerkat 的竞争对手,我拒绝给出链接。

于是就发生了 Twitter 上一度要求给予开发者信任的事情,唉……

Parse

看,我就说我们会回到 Parse 这个话题上来的咩~

Twitter 和 Facebook 就像是社交网络硬币的两面,对我来说,信任哪一方结果都是一样的。我当我想知道某个科技公司在将来如何前进时,我总会重复这句咒语:“跟着金钱走”,这咒语也能告诉你大公司在将来如何会如何表现,尤其是上市公司(TWTR 和 FB 都是上市公司)。美国上市公司在季度财务报表上需要对股东负责,为了有个好看的季度财报,有时甚至不惜损害客户或者合作伙伴的利益。当我看到 Parse 的免费使用范围如何巨大时,我特别担心。在我看来,99% 的应用甚至更多应用都不会达到付费要求的,即使到达了付费要求,也只需付出一点点钱。当 Parse 成为开发者的工具,特别是作为后端服务商时,Facebook 在赚不到钱的情景下做这件事情的动机是什么呢?我相信答案十分明显,那就是 Facebook 想要你的数据,结果发现这些数据不值钱。所以他们决定不再花费时间在 Parse 上了,免费使用 Parse 的众多开发者们没有给 Facebook 带来利润,所以他们做出关闭 Parse 的决定,用 Facebook 自己的话来说就是:

Parse 曾经帮助过无数的开发者创建出优秀的手机应用,对此我们非常骄傲,但是我们需要把资源放到其他地方上了。

翻译过来就是:“你们没有给我们带来足够的钱”

Facebook 和 Twitter、Google 一样,从广告中获得收益,特别是 Google,作为世界上最有价值的公司,超过了苹果公司。事实上,在众多平台中,唯有苹果公司的主要利润来源不是广告,其他都靠广告。

跟着金钱走

今早我发表了这么一条推特:

人们问我有哪些方式可以代替 Parse,如果你不编写自己的服务器代码,你的后台就永远处于危险之中。— Jameson Quave (@jquave) February 2,2016

这是真的,你真不能盲目信任这些社交媒体公司的服务作为自己的后端。你要根据“跟着金钱走”原则来找当事人的动机,如果他们动机不是给你提供服务赚取利润,那么估计这个公司也不会坚持太久。如果你是初创企业的 CEO,这也是做出商业决策的一个好方法。当你和任何人合作时,你必须确认他们的资金动机和你相似,不然你们之间永远都无法有效连接合作。这个理论也使用与雇员、联合创业者、合伙人和平台供应商等等。

Facebook 的 API

早期使用 Facebook 的 API 时,你能轻易获取用户的联系人,结果导致了很多人都会收到 Facebook 游戏的垃圾邮件和信息,也造就了开心农场这样的成功游戏。但是 Facebook 觉得自己不喜欢这样,不再提供获取联系人的接口,这样就给很多应用造成了伤害,Zynga 的股票应声下跌。说真的,看看 Facebook 对 Zynga 的股票造成了哪些伤害:

如果你的主营业务是 App,那么你的后端是非常重要的业务资产,你必须能够自己控制。类似 Salesforce 的云计算公司几乎花了十年的时间才变成大型公司,甚至是在今天,大部分还在使用现场托管软件。原因就是运行良好的业务必须要有自己的关键系统。虽然这样做需要支付系统维护费用和初始部署的费用,但是如果你不能控制核心业务,那就只能把核心业务交给那些不靠谱的人,他们幻想能从你们的数据库中淘出点什么东西提供给广告商。你想让这些人来控制你的服务器吗?你信任 Facebook、Twitter、Google 吗?

创建你自己的该死的后端

你想要你的应用有一个稳定的后端,那么唯一的方法就是你自己创建一个。我知道这样听起来很难,不过如果你用 Ruby on Rails 或者 NodeJS 来创建一个简单的 API 来连接应用的话,难度也不是很大。说白了,Parse 后端基于 javascript,和 NodeJS 在表达上还是有一些相似的地方,使用节点模块传送 API,用 MongoDB 数据库作为后台。如果对你来说这听起来很困难,你只需花费几个小说去网上阅读一下教程即可,你就会意识到完全由你自己来做也不麻烦。实在不行,你还可以雇佣我的公司来帮你做这件事情。

如果你打算让某个平台来创建你的后端,你要确保能够拿到源代码,以及加载到任何服务器上所属的一切工具。Docker 能够包含 App 所有需要的所有的环境,而类似 Heroku 的服务能够让你轻松的部署 Rails 应用。

有趣的一件事情:在我这些博客快要写到 95% 的时候,在使用 Twitter embeds 功能时,它极具讽刺性地毁掉了所有的格式,我不得不重新调整所有的格式。^_^

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

使用 Parse 是一个糟糕的主意的更多相关文章

  1. HTML5之消息通知的使用(Web Notification)

    通知可以说是web中比较常见且重要的功能,私信、在线提问、或者一些在线即时通讯工具我们总是希望第一时间知道对方有了新的反馈。本篇文章主要介绍了HTML5之消息通知的使用(Web Notification),感兴趣的小伙伴们可以参考一下

  2. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  3. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  4. openURL崩溃:iOS 9中可能存在Facebook SDK错误

    也许Facebook的SDK在这个特例上有错误?解决方法我找到了答案看起来它只是一个发布模式问题.通过启用Xcode运行发布版本,我能够调试我的问题.它是由参数sourceApplication引起的,在发布模式下显然需要解包.不知道为什么,但至少我得到它的工作.

  5. ios – 我可以使用哪些iPhone OS API来实现类似于iBook页面翻转过渡的过渡动画?

    >UIKitAPI中的某个地方是否可以使用该动画,还是我必须自己实现?它肯定有3D感觉,他们可以使用OpenGLESAPI吗?解决方法Apple当然使用OpenGLES来实现它.Apple使用的实际API是私有的,但thisblogger具有示例代码的实现的开始.

  6. ios – 通过Fabric安装的Twitter,登录工作,请求推文的持久性错误

    我没有想法.解决方法当你请求推文时,我想你的代码如下所示,对吗?原来他们的文档不完整,应该是这样的客户端对象需要您的用户信息来完成它的工作.我遇到过同样的问题.

  7. ios – Facebook应用程序邀请对话框无效

    任何该功能的工作示例都将非常感激.解决方法您的代码很好,当您发布应用程序时,此功能将实际工作,因为某些Facebook集成需要在使用前获得批准.在状态和审核部分提交您的应用以获得批准

  8. iOS 7,用于断开调用的私有API CTCallDisconnect不起作用

    谢谢!

  9. 检测是否在iOS / Android上的本机Facebook应用程序中加载了网页

    然后我的链接可以启动浏览器,我的网络应用程序继续在Facebook本机应用程序中运行.解决方法这在JavaScript中适用于我:

  10. 我应该使用哪个高级API来管理iOS上的UDP套接字?

    在“NetworkProgrammingTopicsConceptualGuide”的“UsingSocketsandStreams”一章中,Apple说:Note:POSIXnetworkingdoesnotactivatethecellularradiooniOS.Forthisreason,thePOSIXnetworkingAPIisgenerallydiscouragediniOS.同样

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部