09 8月

Stripe使用指南:Swift开发中的信用卡支付

文 / Ziad Tamim:资深iOS开发人员,创业公司移动战略咨询顾问。自App Store上线以来,编写超过80款应用程序。目前,他经营着一家叫做TAMIN LAB的移动开发工作室。

原文链接:http://www.appcoda.com/ios-stripe-payment-integration/

在这篇文章中,我们来谈谈Stripe的集成。Stripe提供了程序库来接受在线及移动应用支付行为,是功能最为强大的程序库之一。如果你计划在iOS应用中出售产品,或者在寻找一种支付解决方案,那么Stripe应该是你的首选。

很多iOS开发人员问我,为什么要选择Stripe而不是应用内购买(In-App Purchase)。根据苹果公司的规定,出售数字化内容需要使用应用内购买,像电子游戏附带的游戏级别,应用给予用户的虚拟物品。对于像衣服这样的实物,则允许使用像Stripe 这样的其他支付方案。所以,在这篇文章中,我会简要介绍Stripe,并解释它是如何工作的,告诉你如何使用Stripe的API构建一个示例,用来接受信用卡的支付行为。
stripe-integration-tutorial

Stripe为何物?

Stripe为开发人员构建,提供友好的API,使商家能够立即接受并管理移动支付行为。而不必为开设商业账户,设立信用卡网关而费心费力。有了Stripe,你可以轻松地实现应用的信用卡支付功能,甚至是重复付款。

Stripe意在使在线/移动交易唾手可得。你很快就会看到,在方便易用的API顶端,Stripe甚至精简了注册流程,集成过程就是这么简单!这就是该公司为什么能够如此迅速地扩张,名列2015十大创业公司行列的原因。

我们的应用程序

为了避免从头构建应用浪费时间,把注意力集中在学习Stripe上,我创建了项目模版。首先,下载项目并运行一下。

在本文中,我们将会创建一个叫做“Donate”的示例,演示如何使用Stripe接受信用卡付款。

iOS-Simulator-Screen-Shot-Jun-9-2015-5.35.27-PM-576x1024

编辑注:此应用为示例程序,根据苹果公司的App Store Review Guidelines,如果应用带有捐款功能,应用本身应当免费,必须通过网站的Safari页面或SMS服务完成公益款项的筹集。

应用的业务周期及Stripe的工作原理

深入实现之前,我们先看看应用如何与Stripe通信,如何处理事务。简而言之,用户发送支付请求的时候,应用如何工作:

1. 应用首先收集支付信息,包括电子邮件、信用卡号码、有效期、CVC(Card Validation Code)和支付表单上的支付金额。然后通过调用Stripe的API将这些信息发送给自己的服务端。

2. 如果支付信息有效,那么Stripe就会返回一个令牌(token)。此时,信用卡还没有被扣费。随后你会使用令牌执行实际的交易。

3. 现在应用获得了令牌。下一步是将其发送到本地服务器来完成扣费的过程。出于安全原因,Stripe需要通过服务器来进行扣费,而不是移动设备本身。不过不用担心,Stripe为我们提供了服务代码,可以轻松完成扣费过程。我们会在后面的小节讨论。

4. 你的本地服务器发送令牌到Stripe来执行实际的扣费操作。无论交易成功与否,Stripe都会返回结果。

5. 最后,本地服务器将有关交易结果的响应返回给应用。

stripe-flow

注:返回的响应是JSON格式的,所以如果不熟悉JSON解析的话,可以查看这个教程

创建一个Stripe测试帐号

创建一个Stripe测试帐号非常简单,可以在几秒钟内完成。Stripe可以简化整个注册过程,注册一个帐号不需要填写任何信息。我真的很喜欢这种精简的流程。如果你正在为客户开发应用,或者仅打算探索一下Stripe的API,这样的流程再好不过了。

第一步是去Stripe的网站,点击sign up按钮:

stripe-signup

你将被引导到注册页面创建一个新的帐号,在这里可以填写个人信息。但正如我之前提到的,Stripe精简了注册流程,可以在这里简单地单击“skip this step”继续。你将能够通过一个以测试为目的的临时帐号访问Stripe的Dashboard页面。

Screen-Shot-2015-06-09-at-9.05.20-PM-e1433890510184

一旦完成这个过程,Stripe的Dashboard页面就会呈现在你面前:

stripe-dashboard

接下来,点击菜单中的“Your Account”,点击“Account Settings”,然后点击“API Keys”选项卡,会显示用于应用开发的Key。

Screen-Shot-2015-06-10-at-12.05.31-AM

这就是Stripe的配置过程。从现在开始,你就可以使用Stripe的API来测试交易了。以后还可以回到Dashboard页面检查交易是否被成功处理了。

使用CocoaPods添加Stripe库

在Xcode工程使用Stripe之前,我们必须将库引入作为一个依赖项。有几个方法可以做到这一点。在示例中,我们将使用CocoaPods,它是一个著名的Swift项目依赖管理工具。就像这个示例,很多项目都依赖于第三方库工作。CocoaPods是一种工具,有助于开发人员管理所需的依赖库,确保这些库是最新的。

如果还没有安装CocoaPods,可以在终端执行下面的命令安装:

sudo gem install cocoapods

只要有耐心,只要等待几分钟的时间就能完成安装。安装完成后,你可以看到“”gems installed这样的字眼儿。

Screen-Shot-2015-06-10-at-4.09.48-PM

接下来,在Xcode工程根目录下创建一个名为“Podfile”的文件,使用你喜欢的文本编辑器打开它,把下面两行复制进来:

pod 'Stripe', '~> 4.0'
pod 'AFNetworking', '~> 2.5.4'

Podfile告诉CocoaPods我们想使用哪个库。我们这里需要是Stripe 4.0和AFNetworking 2.5.4。

现在,退出Xcode,打开Terminal,更改Xcode的根目录。根目录是“Podfile”所在目录。接下来,在Terminal键入:

pod install

CocoaPods将寻找“Podfile”,尝试安装我们所设置的依赖项。下载和安装的过程可能要持续几分钟。完成后,结果应该是这样的:

Screen-Shot-2015-06-10-at-4.28.31-PM

CocoaPods下载完毕,在Xcode项目中引入了Stripe和AFNetworking。然而,从现在起,我们不会再使用原始应用项目了。CocoaPods生成了另一个叫做Donate.xcworkspace的工作区。这个工作区包含了原始项目和CocoaPods管理的项目。

现在打开Xcode中新的工作区(也就是Donate.xcworkspace),你应该注意到一共有两个项目:Pods和Donate。

cocoapod-projects

在Swift项目中使用Objective-C

Stripe的库是用Objective-C写的,而我们的项目使用Swift。不进行适当的配置,这两种语言无法一起工作。通过建立桥接头文件(briddging header),任何Objective-C的库,项目和类都可以在Swift项目中使用。从技术角度来说,这样的关联会把头文件从Objective-C转换成Swift。

通过以下步骤可以创建一个桥接头文件:

  1. 在Donate路径中添加一个新的头文件。对准项目导航器中的Donate右击,然后点击“New File…”。
  2. 选择iOS -> Source分类,选择“Header File”模版,然后点击“Next”。
  3. 将类命名为“Donate-Bridging-Header.h”,点击继续,进行下一步并保存文件。
  4. 接下来,去“Building Settings”,找到“Objective-C Bridging Header”,将值设置为“Donate/Donate-Bridging-Header.h”。

Screen-Shot-2015-06-10-at-4.37.23-PM-1024x312

完成后,打开Donate-Bridging-Header.h文件,编写如下代码:

#import <Stripe/Stripe.h>
#import <AFNetworking/AFNetworking.h>

太棒了!终于完成了项目的配置。我们现在已经做好准备,进入示例程序的实现阶段。

设置API Key

你要做的第一件事就是配置Stripe的API Key。在Stripe的Dashboard页面,你可以点击“Account Settings” -> “API keys”来找到你的Key。现在,我们将使用用于测试的Key,这样你就可以不用真实的信用卡也可以测试交易过程了。

打开AppDelegate.swift文件,在里面插入一行代码(第3行):

  1. func application(application: UIApplication, did-FinishLaunchingWithOptions launchOptions: [NSOb-ject: AnyObject]?) -> Bool {
  2.      // Stripe Configuration
  3.      Stripe.setDefaultPublishableKey(“pk_test_IeR8DmaKtT6Gi5W7vvySoCiO”)
  4.      return true
  5. }

这里使用的是我们用于测试的Test Publishable Key,别忘了你要改成自己的。

注意:以后在实际应用程序中,你可以将Test Publishable Key换成Live Publishable Key。

收集信用卡信息

要进行交易,应用要有一个收集用户信息的环节。Stripe建议通过三种方法收集付款信息:

  • 通过Apple Pay访问用户所存储的支付信息
  • 通过Stripe内置的支付表单组件,PaymentKit
  • 通过构建自己的支付表单

在本文中,我们选择第三种方式,构建我们自己的支付表单。Stripe至少需要收集信用卡号和其有效期。但我也建议要保护CVC的安全,防止欺诈性交易,并获得用户的信任。你可能想要获得另一条信息是电子邮件地址,这样你就可以留有捐款者的记录以备后续沟通。

如果你用的是项目模版,我已经在其中建立了支付接口来收集用户的支付细节。所有的文本字段都与ViewController.swift文件中对应的outlet关联了。

donate-app-storyboard

现在,打开ViewController.swift,更新donate方法:

  1. @IBAction func donate(sender: AnyObject) {
  2.         // Initiate the card
  3.         var stripCard = STPCard()
  4.         // Split the expiration date to extract Month & Year
  5.         if self.expireDateTextField.text.isEmpty == false {
  6.             let expirationDate = self.expireDateTextField.text.componentsSeparatedByString(“/”)
  7.             let expMonth = UInt(expirationDate[0].toInt()!)
  8.             let expYear = UInt(expirationDate[1].toInt()!)
  9.             // Send the card info to Strip to get the token
  10.             stripCard.number = self.cardNumberTextField.text
  11.             stripCard.cvc = self.cvcTextField.text
  12.             stripCard.expMonth = expMonth
  13.             stripCard.expYear = expYear
  14.         }
  15. }

当用户点击Donate按钮时,该动作方法将被触发。我们首先初始化一个STPCard对象,并进行赋值。

下一步,在同样的方法中添加如下代码:

  1. var underlyingError: NSError?
  2. strip-Card.validateCardReturningError(&underlyingError)
  3.    if underlyingError != nil {
  4.         self.spinner.stopAnimating()
  5.         self.handleError(underlyingError!)
  6.    return
  7. }

STPCard类有非常方便的方法validateCardReturningError,我们就不用实现自己的验证逻辑了。类将收集到的信用卡信息发送给服务器,如果卡片信息是无效的,就会返回一个错误(error)。

像上面一样,将下面的代码添加到统一的方法中:

  1. STPAPICli-ent.sharedClient().createTokenWithCard(stripCard, completion: { (token, error) -> Void in
  2.             if error != nil {
  3.                 self.handleError(error!)
  4.                 return
  5.             }
  6.             self.postStripeToken(token!)
  7.         })

一旦确认信用卡有效,我们就调用STPAPIClient类的createTokenWithCard方法,通过安全的HTTPS请求发送信用卡数据。如果请求成功,Stripe将返回一个令牌。

这个时候用户的信用卡还没发生扣费。Stripe仅仅给了你一个一次性的令牌。稍后你将这个令牌发送到本地服务器去执行实际的扣费。

如果无法获取令牌,应用会简单地向用户显示一个错误信息。还是在同一个文件中,ViewController类中需要插入如下代码:

  1. func handleError(error: NSError) {
  2.         UIAlertView(title: “Please Try Again”,
  3.             message: error.localizedDescription,
  4.             delegate: nil,
  5.             cancelButtonTitle: “OK”).show()
  6.     }

建立本地服务器

本文刚开始的时候提到过,用户的信用卡扣费实际发生在我们自己的服务器上。出于安全原因,Stripe不直接从应用程序对信用卡进行扣费。Stripe只是生成一个令牌。应用将这个令牌传递给本地服务器进而进行实际的扣费。

所以在实现应用程序这一步之前,让我们停留片刻,建立自己的本地服务器来处理付款。为了创建自己的服务端,我们将使用PHP作为主要的编程语言,并利用Stripe提供的库。不用担心,你不必是一位Web开发的行家,跟着所描述的步骤走,就能配置处理Stripe支付所需要的服务端。

首先,下载XAMPP (for OS X) v5.6.8 (or up),在Mac上安装。接下来,下载这个压缩文件并解压缩。找到XAMPP的安装目录,通常安装在“Applications”文件夹。打开“Applications/XAMPP/htdocs”,拷贝压缩后的文件夹。

xampp-donate-htdoc

完成以后,返回XAMPP文件夹,打开“manager-osx”。在“Manage Servers”标签下点击“Start All”,服务就启动了:

xampp-manager

下一步就是去“Applications/XAMPP/htdocs/donate”,使用你喜欢的任意文本编辑器打开文件“payment.php”。

用Test Secret Key将方法中的参数替换掉,这在本文中已做描述:

\Stripe\Stripe::setApiKey("sk_test_qCTa2pcFZ9wG6jEvPGY7tLOK");

搞定了!你刚才已经完成了服务端的配置,简单吧?

给服务端发送令牌进行支付处理

现在,我们的本地服务器准备处理付款。我们回到Xcode,通过发起一个HTTP POST请求给本地服务器开始发送令牌。打开ViewController.swift,在文件中插入代码:

  1. func postStripeToken(token: STPToken) {
  2.         let URL = “http://localhost/donate/payment.php”
  3.         let params = [“stripeToken”: token.tokenId,
  4.             “amount”: self.amountTextField.text.toInt()!,
  5.             “currency”“usd”,
  6.             “description”: self.emailTextField.text]
  7.         let manager = AFHTTPRequestOperationManager()
  8.         manager.POST(URL, parameters: params, success: { (operation, responseObject) -> Void in
  9.             if let response = responseObject as? [String: String] {
  10.                 UIAlertView(title: response[“status”],
  11.                     message: response[“message”],
  12.                     delegate: nil,
  13.                     cancelButtonTitle: “OK”).show()
  14.             }
  15.             }) { (operation, error) -> Void in
  16.                 self.handleError(error!)
  17.         }
  18. }

由于我们在本地建立了服务端,那么就把URL设置为http://localhost/donate/payment.php。如果在远程主机中建立的服务端,请做相应的更改。

Stripe要求我们提交令牌来执行实际的扣费。外带付款额,币种和相关描述。你可以使用描述字段作为付款说明。在示例中,我们只是使用这个字段来存储用户的电子邮件。

一旦配置好参数,就使用AFHTTPRequestOperationManager提交一个异步的POST请求。这是AFNetworking提供的一个API。如果请求成功,我们就向用户显示支付响应。

这样就好啦!现在你可以运行应用程序并测试交易功能。出于测试目的,可以使用4242 4242 4242 4242这个信用卡号,还有任意的将来日期作为有效期(例如07/2019),包括CVC(例如222),这样可以模拟交易过程。

donate-stripe-success-300

为了进一步验证支付是否成功,可以看看Stripe的Dashboard:

Screen-Shot-2015-06-11-at-5.09.01-PM

总结

在本文中,我带着你学习了Stripe的基础知识。你应该学会了如何在应用中集成Stripe来接受信用卡的支付行为。为了进一步学习,我鼓励你去看看官方文档。Stripe提供了许多通过其API完成支付的方式,可以通过官方文档了解更多信息。

作为参考,可以从这里下载整个Donate项目,请使用Xcode 6.3(或以上)版本运行。别忘了把AppDelegate.swift文件中的Secret Key换成自己的。

http://www.csdn.net/article/2015-07-27/2825301-ios-stripe-payment-integration/1

11 5月

应用下载的价值究竟在什么地方?

文 / Scott Stanchak:《纽约时报》移动业务营销总监。此前,他负责Avis Budget Group公司移动营销及产品策略。他还是Winery Passport这款热门应用的创建者,在其站点BakBurner.com撰写了移动营销的相关文章。

原文链接:http://venturebeat.com/2015/02/14/the-value-of-a-download/

下载的价值有多大?

对于我来说,下载没有太大的价值,但是给下载贴上价签以后,它的价值就产生了。

自从我在大公司负责移动营销工作开始,我遇到过许多人,他们把应用的下载量作为应用是否成功的唯一指标。这大概是因为“下载”这个词语与移动应用程序关联最紧密。但除非你的应用程序是付费下载,否则很大的安装量并不代表这些用户完成了你所期望的行动。

我非常清楚下载量和下载速度都会对应用商店排名结果产生影响。这是图表意义上的成功。然而,如果不在市场营销和拓展宣传中投入资金以保持地位,这样的排名常常是难以为继的。如果把钱花在这些地方的话,你要相信,这些钱会生出更多钱的愿景定会实现。

即使是为那些大量廉价的下载花钱做铺天盖地的广告,用来驱动其在应用商店的排名,这样的做法都比单纯的下载更能实现我们所期望的行动。提升排名背后的目的则是使下载量实现连续的增长,这会有更多的益处,非常有可能引出有意图的行动(intended action)。

行动(Action

你的“行动”是什么?这是我在做演示或与他人谈论移动营销问题时常问的一个问题。

在《纽约时报》任职期间,我主要的行动是订阅。在Avis Budget Group公司,我的行动是预定出租车。在Winery Passport公司工作的时候,我的行动是让用户通过一个应用来付费验证他们的护照。多年来,我在营销活动中花费的每一块钱都是在寻找用户的意图,这其中包括订阅者的意图,租客和买方的意图。

无论你的行动是什么,它必须带有一个指定的值。原因很简单:确定投资回报率(Return On Investment, ROI)。我提到的所有这些行动显然都是货币上的价值。但还存在很多并未对我们的产品或服务付费的用户。

工作中观察到所期望的简单行动可能是不同的——登记,电子邮件注册,还有额外的文章阅读等等。总体上了解用户在每个场景中的价值所在,不仅有助于解释递增的营销利润,而且如果这些简单行动没有达到目的,那么这种认识对理解ROI也比较关键。

测量你的行动

几年前,你对应用安装活动唯一可以测量的数据就是点击率。除此之外,你还会从Apple,Google或者其他第三方分析工具得到支持数据,但这些数据并没有与用户间交流的活动。从而无法将特定的点击下载与应用中的事件相联系。

谢天谢地,那些日子已经一去不复返了。第三方公司提出了解决方案,可以测量所有营销活动,不仅是点击,还有用户行动和其间的许多其他事件(event)。

它是这样工作的:当用户点击一个活动后,他们的设备ID将被这些第三方公司的某一家存下来。当同用户再次启动应用的时候,SDK(Software Development Kit)就会读取设备ID,并验证这个设备ID是否与某个活动关联过。如果关联过,就即刻建立起了一对一的关系。你可以追踪该用户对应用的使用状况,包括这些用户是否进行过购买的行动。

未使用这些第三方公司的工具在应用商店对应用进行追踪,应用是不会有市场的。无论是否花钱动用了媒体,或者本身就是媒体。这就像网站上被推荐的资源,有其价值所在,而在这些资源如果在手机上,则会更有价值。

通过移动应用程序成功测得用户有意图的行动,你将能够做出更明智的决定,进而会调整活动的开支,还会对网络的部署进行调整。这会使你获得更高的投资回报率,意味着花同样的钱会获得更大的下载量和更多有行动的用户。

就像漏斗,顶部较小,但底部的回报会更大。这就是作为底部的下载最为有价值的地方。

02 4月

为什么要认真对待与在线学习有关的应用

文 / Ryan Craig:University Ventures公司的执行董事,该公司专注于推动大专院校进行创新。Ryan即将出版新书College Disrupted: The Great Unbundling of Higher Education”。

原文链接:http://venturebeat.com/2015/01/17/why-online-learning-needs-to-get-serious-about-apps/

上个月,中国最大的民营教育服务提供商新东方教育科技集团与在中国拥有近5亿WeChat用户,领先的短信息服务提供商的腾讯公司,同意启动一项以网络聊天为核心的集成服务。每一所大学都应该问的问题是:这对在线学习(online learning)意味着什么?

仅在10年前,我们当中的许多人认为无论何时何地,在线学习意味着取得学位。现在有了智能手机,移动学习成为可能。学习效果却打了折扣。在线学习三位一体的构成包括:内容和讲座(content/lecture),讨论(discussion)以及评估(assessment),但这些内容都没有迁移到智能手机上。也就是说:

导航部分:在智能手机上对课程导航具有一定的挑战性。不仅因为智能手机的屏幕小,导航功能需要有足够大的按钮区域可供手指去选择,而且还有我们使用智能手机体验上的差异。如果内容加载时间超过5秒钟的话,那么相比使用PC的用户,智能手机用户更容易放弃要浏览的内容。

讨论:讨论版在智能手机上使用效果很好。到处都可以参与讨论,同步的视频讨论也不错,但也不适合所有人。会话时间也要比课堂上短得多。然而,使用智能手机提交的帖子要比曾使用的其他方式发的信息要短得多,也没有那么正式。

测试:使用智能手机,无论在课堂环境中还是在课外,对于形成性评价(formative assessment)来说,效果还不错,而终结性评价(summative assessment)效果却不怎么样。

基本脉络应该已经显现了。任何能够在短期内完成的事情,使用智能手机效果都还不错。

所以在线学习是走上坡路还是下坡路,这是否取决于我们对短期学习的整合的能力呢?就像新东方教育科技集团与腾讯公司正在做的事情那样。当然会有很多在智能手机上使用的与之类似的和教育相关的应用(application),但这不会存在正式教育中的那些评估测试和被认可的证书。这主要有两方面原因。首先,需要授予这种证书的各色课程和终结性评估无法在短时间内被整合。其次,对于和教育相关的应用来说,可能不必对这些东西进行整合,因为这些应用开辟的是一条新路。

这些应用是智能手机所面临挑战的解决方案

目前,智能手机用户使用应用所进行会话的时长是浏览网页的3倍。应用的使用频率也比网站要多得多。用户花在应用上的总时间目前以超过20%的速度逐年递增。行业知名的互联网统计公司ComScore称,对于智能手机用户来说,手机上使用应用所占时间超过了其所使用数字媒体时间的五成,18至24岁的用户是主力军。

应用是为特定目的而开发的。因此不难想象,一个是经济学入门的应用,而另一个则是心理学入门的应用。应用是有价值,有目的的模拟,也是学习体验的游戏化模式,它还将现实世界的这些内容(如学生的地理位置)作为输入数据融进了学习。

但如今像“mLearning”这样的移动教学平台忽略了这一点。当前高校中使用的应用根本没有正式的教学内容,全都是关于选课,校园定位的应用。还有就是一些无关紧要的学习内容(像医学缩略语词典)。Blackboard Mobile Learn这个站点就是个典型的例子,有一定的教育意义。所有类别产品的功能(公告、成绩)都以图片的方式展示在智能手机上,但却无法获得展板上所展示的实质课程资料。这是“mCheating”,不是“mLearning”。

目前虽然大部分在线学位课程是以学习管理系统的形式存在的,都声称自己是“移动平台”,这些平台所属机构认为,解决移动问题的方法是简单地基于传统的线上学习系统架构,让移动终端访问教学资源。这等同于认为机构的在线学习模式解决方案就是向YouTube或iTunes放置讲座视频。

28 11月

你能听到我说话吗?不行,我没安装那个应用!

文 / Matthew W. Meyer:软件开发人员,以优等成绩毕业,获计算机科学副学士学位。

编译 / 白云鹏

原文链接:http://www.mwmeyer.com/blog/can-you-hear-me-now/

在过去的10年左右的时间里,无论我们的沟通方式,还是我们的日常生活方式,都发生了很多变化。互联网的普及使人与人彼此联系更紧密,也改变了彼此交往的方式。我们目前正处于数字网络初创期的“淘金热”。我始终将新近的应用程序更新到最新,自称使自己轻松的生活更轻松。

结果是我对技术的现状根本不屑一顾。传统的载波通信技术(语音/短信)有很多方式可以去改进,使之现代化。每次我起身懒洋洋地用手机去回复短信时,都忍不住会抱怨。从技术角度说,我肯定可以做这件事。

软件方面的事情就是有些微妙。MightyText只是提供这类功能的众多应用中的一例。这就不得不说OTT[1]应用的崛起。当电信运营商把持他们的用户来赚钱,而非改进其通信体验时,不计其数的软件公司则腾出手来打造基于这些运营商及整个因特网的“Over The Top”服务。像GroupMe,Viber,WhatsApp,iMessage,Hangouts和Skype。这些只是业内规模较大的参与者。

如果我要跟一位朋友视频的话,那就糟了。我首先要确认对方下载了应用,创建了帐号并且登录,确认正常工作等等。对于电信运营商来说,这个问题似乎很早以前就解决了。而事实上,蹩脚的短信服务仍旧占领主导地位的唯一原因是,它有效保证了每个人很容易访问该服务。

未来的运营商只作为网关的作用越来越明显。无论是当今基于超文本传输协议的互联网,还是未来演变出的什么网络,光纤和光谱为因特网提供了连接。主要的市场资产运营商经过多年的发展,耗费了数百万美元,持有物理基础设置。这也是为什么像AT&T和Comcast这样的公司,初创公司在相同的商业模式下无法与其匹敌的原因。

显然,当电信运营商开发健壮的软件来提高自身服务的同时,他们就无力维护这些基础设施。这样一来,以软件为核心的公司间展开了迅速竞争。遗憾的是,人与人之间的沟通在互联网上一直在演变,传统的语音电话,短信已经被淘汰。

这些以软件为核心的公司没有去和其他竞争者互操作的动机。这对于一个封闭性的企业来说也许是好事,但对于全球性通信公司来说就不太好了。

虽然我觉得满足了互联网富通信(语音,消息和视频聊天)互操作性的某种核心通信标准还可以做得更好,但这不是必须的。我无法在业界提出一套可以解决这些互操作性问题的有力意见。而这对于向第三方开发人员提供API的OTT应用来说,看起来是向正确的方向迈了一大步。

说了这么多就一句话,我主张开放的统一通信。统一通信服务不仅让我轻而易举地在任何设备上进行通信,还可以统一三种主要的通信格式(语音,视频和消息)到一个平台。通过发布他们的协议,维护访问平台数据API,开放的通信服务就能让我选择不同的第三方应用和客户端。

数字通信迫切需要具有互操作性的发展方式,可悲的是,我还没有看到相关迹象。

 

[1]OTT是指”over-the-top”服务,通常是指内容或服务建构在基础电信服务之上从而不需要网络运营商额外的支持。