如何接入腾讯云.net腾讯短信接口口

966,690 二月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
沙开波:腾讯云的网络架构
沙开波:腾讯云的网络架构
欲知区块链、VR、TensorFlow等潮流技术和框架,请锁定
个人简介 沙开波,2009年加入腾讯,目前为腾讯云基础产品技术总监一职,之前曾先后负责高性能服务器框架、Web服务器、负载均衡等公共组件以及IaaS云计算平台的研发与管理工作, 在高性能分布式服务、计算与网络虚拟化、网络安全隔离等领域拥有丰富经验。
全球架构师峰会(International Architect
Summit,下简称ArchSummit)是由InfoQ中文站主办的一次全球性架构师峰会。ArchSummit专门针对架构师人群,讲述与架构和架构师相关的各方面趋势、技术和案例。这也是继QCon之后,InfoQ中文站主办的又一次高端技术盛会。
沙开波:腾讯云刚开始的网络的基础架构,就没有往VPC的方向发展。刚开始我们很简单,初衷就是一个大三层,大三层在云里面其实有一些问题,它的IP地址不能跨交换机做迁移。但是在云里面我们最大的优势是主机可以随意的在整个机房里面做迁移。这样的话硬件故障宕机,或者硬件有一些潜在问题,我可以快速的把虚机漂移出去,漂移到另外一台宿主机里面。所以刚开始就是做大三层,后来变成二层,二层可以解决跨交换机迁移的问题。但是大二层里面又带来一些广播的问题,腾讯历史上也出现过一些这样的故障,因为IDC里面的网络广播风暴,把整个IDC的网络打垮了。在这以后我们就下定决心要做一个基于三层网络架构的overlay的网络。那时候我们才考虑通过软件方式实现这么一个IP可迁移的能力。
沙开波:应该是前年年底的时候。你刚才说到当VPC里面规模比较大的时候,东西向流量可能是一个瓶颈,这个在我们刚开始设计overlay网络的时候就考虑到了,我们希望一个VPC里面所有的节点之间的通信都是点对点的,它会经过一些集中式的网络节点,直接找到下一跳,这样解决东西向流量的性能瓶颈问题。
另外一个你刚才也说到控制平面,当我们的VPC规模很大的时候,怎么样把配置快速可靠的下发到每一个宿主机上面,这个像你刚才说的业界有垂直的有水平的,我们其实还是从自己的资源角度设计了一套全分布式的配置下发的框架。这个框架从配置下发的业务特点来看,写量并不多,写量就是里面增加一台虚拟机或者销毁一台虚拟机,或者虚拟机跨机器迁移的时候,这些配置会发生变化需要写到配置中心,真正稳定的情况下对写的要求不高,但是对读的要求很高。所以我们这个分布式集群主要focus在读的性能可扩展性上面。
现在我们每一个宿主机上面有agent程序,可以动态的获取这台机器上面需要哪些配置,它主动的从配置中心里面读取相应的配置,当配置中心数据有变化的时候,也马上能够感知到。一台虚拟机如果宿主机IP变了也能马上感知到。大概是这样样子。
沙开波:好处我觉得是比较明显的,DPDK这个技术它能够解决什么样的一个问题,这个比较明显。但是从我们实际的应用场景来看,我觉得还是要看现在我们业务面临的问题,或者我现在要解决一个什么样的业务场景,去看这个技术是不是放到我们这里是OK的。说简单一点,DPDK解决了一个多核情况下的网络性能转化的问题,这样的技术,它其实在网关类的服务上面是有很好的表现的。所以我们这边一些网关类的服务,比如说VPC网络要和外面的网络进行通信,肯定会需要有一个边界的网关,这个边界的网关用DPDK做比较合适。
沙开波:腾讯云的基础网络最大的问题是用户不能在这个基础网络里面自己去规划网段。用户比如说在基础网络里面买一台虚拟机,这个虚拟机它的IP其实是散列的,不是连续的,这样如果你要跟外面的网络去做扩展的话,只能是IP到IP的打通,但是在VPC里面,因为用户可以自己去定义网络,定义网段,而且我们有自定义路由的能力。当这个VPC要和外面的网络打通的时候,很简单,只需要在VPC自定义路由表上面配一条路由,直接就达到网段到网段的打通,这样平行扩展起来是很方便。假如他自己有一个数据中心,现在有一个vpc网络,只需要配一条路由就可以把两个网络打通。
沙开波:因为是网段到网段的打通,如果数据中心只有一个网段的话就只需要配一条路由,就看对端里面数据中心的网段是怎么分布的。
沙开波:对。
沙开波:怎么说呢,腾讯云是一个公有云,上面跑了各种各样的服务,有些用户可能是计算密集型,有些可能是网络密集型,从整体上来看的话,用户一般对机器的负载用的不是很满。整体负载,不管计算还是网络都处于比较低的水平。
沙开波:首先,腾讯的VPC网络没有采用开源的技术方案,我们一些关键的系统,包括计算、网络、存储都是自己研发的,我们在做自己的方案的时候,会去参考业界或者开源社区里面的一些方案。我们做的VPC网络的技术方案跟刚才你说的DVR方案是比较类似的。
沙开波:产品层面的话最大支持一个B段,65535的规模。
沙开波:刚才也有一些提到,南北向控制平面的数据的管理,我们其实是用的一个分布式的集群服务来做的。我们所有跟网络相关的配置,都放到这个集群里面管理。这个集群它有一个特点是读的性能是可以平行扩展的,基本上性能不够了可以加一台机器解决性能问题。所有的宿主机上面的虚拟交换机需要的配置,都是通过拉取的方式去把配置拉下来。我们的读性能是没有瓶颈的,下面的节点规模是可以无穷大的。所以基本上现在我们一个模块,几千台的物理机,几万台的虚拟机这个量级不成问题。
沙开波:控制平面的?
沙开波:从产品层面并不复杂,一个vpc的能力无非就是一些对VPC的管理,比如创建VPC,VPC下面划一个子网段,里面创建一台机器,包括宿主机地址的变更,这些能力在产品上面表现出来是不多的,所以你刚才说的北向接口也是比较简单,我们也是结合业务场景和产品需求来设计这套北向接口。
沙开波:我们有一些服务,比如VPN服务是采用了联合厂商一起做的一个NFV的解决方案,以后我们也是希望有更多的厂商能够把他的NFV的服务放到我们的服务市场里面去,这样的话,跟厂商一起去建设服务市场,通过NFV的解决方案,给到客户一些更多的网络功能。
沙开波:腾讯现在整个产品的框架,最底层是一个最基础的IaaS平台,里面有云主机,负载均衡,VPC的能力,cbd,cmem,一些存储的服务,上面是有很多面向各个垂直行业的解决方案,游戏的、视频的、金融的还有移动的等等。从IaaS平台来看的话,我是觉得这相当于一个个积木,用户来到腾讯云可以通过IaaS平台里面的一个一个积木,一个一个功能,一个一个服务,去构建满足自己业务需求的解决方案,通过我们的积木搭建自己的系统。
沙开波:底层,对。但是刚才说了行业也是我们的一个方向,为什么会有移动解决方案?游戏解决方案?这个其实是本身我们腾讯云或者说腾讯公司,它一年来在这个行业里面积累下来的一些能力,把这些能力做成服务,通过公有云这样一个出口开放给用户直接去用。包括以后比如说即时通讯这样的服务,也可以做成一个解决方案给到用户。
沙开波:有可能。
InfoQ:好,谢谢您接受我们的采访。
相关厂商内容
相关赞助商
QCon北京-18日,北京&国家会议中心,
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。iOS腾讯云MTA嵌入方法使用小结 - 推酷
iOS腾讯云MTA嵌入方法使用小结
登陆腾讯云分析移动统计前台
,按照步骤提示注册应用,即可获得
如果应用是通过其他渠道,比如
腾讯移动开放平台
接入腾讯云分析,则会自动为您分配
,按页面提示操作即可。
向工程中导入
压缩包,解压至本地目录,将其中的
头文件导入到您的
应用工程中。
MTAConfig.h)
在解压开的
添加依赖系统库。依赖的系统库包括:
libz.dylib
libsqlite3.dylib
SystemConfiguration.framework
CoreTelephony.framework
AdSupport.framework
在代码中添加
import “MTA.h”&
import “MTAConfig.h”&
MTAConfig.h
配置相关接口,需要在
接口前被调用才能及时生效
统计功能相关接口,需要开发者主动调用才能完成某项功能的统计。
应用需要在应用启动时在启动结束函数
didFinishLaunchingWithOptions
提供的启动方法
[MTA startWithAppkey:@&myappkey&]
启动。注意
startWithAppkey
的参数为申请的统计
注意:其它
情况下需要调用下面方法,传入
MTA_SDK_VERSION
,并检查返回值。
+(BOOL) startWithAppkey:(NSString*) appkey checkedSdkVersion:(NSString*)ver&
启动结束后,应用可以开始调用
提供的其它统计方法。
App delegate
中嵌入腾讯云统计
嵌入腾讯云统计
[MTA startWithAppkey:@&
ICAM83MA95BN
为我的测试值
检查插码是否嵌入成功
& & if ([MTA startWithAppkey:@&
ICAM83MA95BN
& checkedSdkVersion:MTA_SDK_VERSION]) {
& & & & NSLog(@&MTA Start successs!&);
设置统计上报策略,上报方式有以下几种:
MTA_STRATEGY_INSTANT = 1,//
MTA_STRATEGY_BATCH = 2,//
批量上报,达到缓存临界值时触发发送
MTA_STRATEGY_APP_LAUNCH = 3,//
应用启动时发送
MTA_STRATEGY_ONLY_WIFI = 4, //
网络下发送
MTA_STRATEGY_PERIOD = 5,& & //
每间隔一定最小时间发送,默认
MTA_STRATEGY_DEVELOPER = 6, //
开发者在代码中主动调用发送行为
MTA_STRATEGY_ONLY_WIFI_NO_CACHE = 7 //
网络下发送
发送失败以及非
网络情况下不缓存数据
[[MTAConfig getInstance] setReportStrategy:MTA_STRATEGY_INSTANT];
超时时长,默认
秒。如果设置为
秒,应用退入后台超过
秒即认为是一次新的启动
[[MTAConfig getInstance] setSessionTimeoutSecs:60];
默认会捕捉异常及
所以应用中不用代码处理即可捕获所有异常,非常方便
// [MTA trackException:];
渠道名,默认为
&appstore&
。设置后会在分析中心分渠道统计信息
[[MTAConfig getInstance] setChannel:@&appstore&];
//AppVersion
设置后会在分析中心分版本统计信息
[[MTAConfig getInstance] setCustomerAppVersion:@&4.0.0&];
//appVersionNo
如果用户使用
共享登录,把用户
,则用户信息统计将更加全面,包括性别比例,新老用户比例,年龄分布,学历分布,地域分布,学历分布等。个人觉得很有必要添加
共享登录功能。
NSString* qq = @“84”7093460;
[MTA reportQQ:qq];
自定义事件
以上基础配置完成后,在
云分析中心即可完成
等功能的统计。
的统计,首先,用户需要在
自定义分析
自定义事件
中新建事件,这里主要是获取事件
。如创建登录页面手机用户登录事件,事件
cellPhoneLogin
,登录完成处写下代码:
NSDictionary* kvs=[NSDictionary dictionaryWithObject:@&Value& forKey:@&Key&];
[MTA trackCustomKeyValueEvent:@&cellPhoneLogin& props:kvs];
即可完成登录事件的统计。
其它事件依次类推,用户根据不同需求创建自定义统计事件。
等的统计,需要在每个页面
view controller)
的启动与结束时调用对应方法。如:
-(void) viewDidAppear:(BOOL)animated{
& & [super viewDidAppear:YES];
& & NSString* page = @&Page1”;
& & [MTA trackPageViewBegin:page];
-(void) viewDidAppear:(BOOL)animated{
& & [super viewDidAppear:YES];
& & NSString* page = @&Page1&;
& & [MTA trackPageViewBegin:page];
这样即可完成
相关统计。如果应用中多个页面这样操作,则可以统计页面间相互跳转情况,以及实现
等功能的统计。
自定义事件
自定义事件分为普通事件、计算事件、预定义事件。
预定义事件与具体应用类型有关,有注册事件、登录事件、付费事件。
普通事件统计事件发生次数、事件参与人数、事件时长,及事件各参数出现次数、人数、时长。
计算事件支持对事件参数做
COUNT(DISTINCT)
Dimension(
作为统计维度
。平均值是一个经常用到的计算,因为
AVG=SUM/COUNT
AVG=SUM/COUNT(distinct),
所以计算事件无需配置平均值运算。至于标准差、中位数之类复杂数学运算目前暂不支持。
这里写了一个统计新浪微博共享登录所需时长的自定义事件,用户点击按钮开始计时,用户完全登录成功停止计时。方法如下:
按钮触发时如此代码:
MTA trackCustomEventBegin:@&sinaLoginTime& args:nil];
登录结束后如此代码:
[MTA trackCustomEventEnd:@&sinaLoginTime& args:nil];
这样即可在分析中心查看所有用户使用新浪共享登录的统计用时。其它计时事件的使用可以举一反三。
自定义分析
适用于分析应用中某些关键路径每一步的转化率,来检验流程的合理性,用户触发初始事件后在
天内完成目标即可视为成功转化。漏斗模型需要在分析中心自定义创建。
对某个固定接口的测速统计可以这样写。以下为检测登录接口示例
监控登录接口
MTAAppMonitorStat* stat = [[MTAAppMonitorStat alloc] init];
[stat setInterface:
@&:8080/test/wl/u/login.wl?vendorId=1DE&req=ph0fh0V4Xg&userId=&loginId=&channelId=-2&usersIdFk=&terminalType=i&moneyClassId=0&remoteIP=192.168.3.19&subTerminalType=i&versionNo=1.0.0&lang=zh_CN&deviceSN=1150&
[stat setResultType:MTA_SUCCESS];
业务返回类型
[stat setRequestPackageSize:1024];
上传请求包量,单位字节
[stat setResponsePackageSize:1024];
上传请求包量,单位字节
[stat setConsumedMilliseconds:36000];
消耗的时间,单位毫秒
[stat setReturnCode:0];
业务返回的应答码
[MTA reportAppMonitorStat:stat];
注意,以上绿色注释参数必须设置,不然会统计不出数据。完成设置后就可以在分析中心查看登录接口的一些信息了。
测试地图可以形象、鲜明的显示该
的网络运营商在全国分布的一些数据。
时段曲线可以统计不同运营商,不同时段下
测速地址的的平均耗时,总耗时,测试次数,失败率等的一些数据。
测试地址管理,可以自己增加、删除想要测试的测速地址。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致JS_SDK使用说明
特别说明:
JS SDK已从V1.0.0版本升级到V1.0.1版本。
请通过地址/qzone/openapi/qc_loader.js获取最新版本的JS SDK。
V1.0.1版本的JS SDK解决了旧版JS SDK与浏览器已知的兼容性问题。
为了让应用更快接入,腾讯提供了JS SDK。
JS SDK是现有最简单的接入QQ互联的方式。
JS SDK基于QQ互联协议的,
封装了登录流程与中的所有OpenAPI调用方法。开发者不需了解协议,只需要前台交互,以及将相关的参数修改成自身对应的参数即可使用。
同时,QQ互联又提供了可供第三方高级需求进行自行配置的可选参数与相关函数,使开发者可以根据自身需求灵活使用。
本JS SDK不需要配置任何跨域文件,支持在绝大多数主流浏览器下使用;对于少数老版本的浏览器,需要浏览器支持flash插件来完成跨域通信的问题。
开发者只需要按以下四个步骤粘贴代码到网页,即可实现QQ登录功能,过程非常简单快速。现在就去。
1. 首先需要,并成功获取到appid和appkey。
2. 在html页面适当的位置引入JS脚本包(将下面代码中的“APPID”替换为申请接入QQ登录时获得的appid;"REDIRECTURI"替换为申请接入QQ登录时输入的):
&script type="text/javascript" src=&/qzone/openapi/qc_loader.js& data-appid=&APPID& data-redirecturi=&REDIRECTURI& charset="utf-8"&&/script&
在html页面需要插入QQ登录按钮的位置,粘贴如下代码:
&span id=&qqLoginBtn&&&/span&
&script type="text/javascript"&
QC.Login({
btnId:"qqLoginBtn" //插入按钮的节点id
上述代码中放置了一个html元素节点,并给该节点指定全页面唯一的id,例如上面例子中的&span id=”qqLoginBtn”&&/span&;开发者也可将其改成自定义的按钮名称。
上述步骤正确执行后,页面粘贴上述代码处会出现如下按钮:
点击该按钮,即可发起登录请求。
若需要对登录按钮进行设置,请。将修改后的代码粘贴到页面中放置登录按钮处。
JS SDK封装了获取Access Token以及OpenID的方法,因此开发者不需要再开发代码进行获取,直接调用QQ登录OpenAPI即可。
该步骤的作用是回调地址将获取到的Access Token和OpenID返回给调用页面。
在回调地址页面,即1.1节中回调地址“REDIRECTURI”指定的页面,粘贴如下代码:
&script type="text/javascript" src=&/qzone/openapi/qc_loader.js& charset="utf-8" data-callback="true"&&/script&
(1)调用方式说明
QQ互联在JS SDK中封装了所有的OpenAPI接口,开发者只需要传递OpenAPI名称,以及OpenAPI需要的相关参数,就可以调用OpenAPI。
调用OpenAPI时,请统一遵循下述调用方式:
QC.api(api, paras, fmt, method):Request
函数说明:
用JS SDK协助调用OpenAPI。
参数说明:
指定要调用的OpenAPI名称。例如:调用时,OpenAPI名称为“add_share”。
各OpenAPI的名称具体请参见。
指定要调用的OpenAPI对应的参数。各参数使用JSON的键值对格式列出。
OpenAPI对应的参数具体请参见中各OpenAPI的参数说明。
指定OpenAPI的返回格式,可用值为“JSON”或“XML”。默认为“JSON”。
指定OpenAPI调用请求的发起方式,可用值为“GET”或“POST”。根据配置,默认发送数据为“POST”,获取数据为“GET”。
返回值说明:
每个OpenAPI调用时均指定了一个对象,开发者可根据OpenAPI请求完成情况指定不同的处理函数。
每次QC.api调用的异步响应都会返回一个对象,用于接收OpenAPI的返回值,包括返回格式、返回数据、OpenAPI请求错误码等。
(2)调用OpenAPI示例
OpenAPI的调用示例,请参见JS SDK的页面。
QC.Login.showPopup(oOpts):Window
参数说明:
oOpts:需要指定appId,回调地址redirect_URI。
参数示例如下:
appId:"222222",
redirectURI:&/qc_back.html&
返回值说明:
返回浏览器弹窗对象。
函数使用示例:
QC.Login.showPopup({
appId:"222222",
redirectURI:&/qc_back.html&
QC.Login.signOut():void
QC.Login.getMe(function(openId, accessToken){}):void
参数说明:
这里的参数为回调函数,通过回调函数获取openId和accessToken。
openId:用户身份的唯一标识。建议保存在本地,以便用户下次登录时可对应到其之前的身份信息,不需要重新授权。
accessToken:表示当前用户在此网站/应用的登录状态与授权信息,建议保存在本地。
QC.Login.check():Boolean
返回值说明:
true:说明登录成功。
false:说明登录失败。
开发者可以根据自己的需要,自定义登录按钮,示例如下:
&span id=&qqLoginBtn&&&/span&
&script type="text/javascript"&
//调用QC.Login方法,指定btnId参数将按钮绑定在容器节点中
QC.Login({
//btnId:插入按钮的节点id,必选
btnId:"qqLoginBtn",
//用户需要确认的scope授权项,可选,默认all
scope:"all",
//按钮尺寸,可用值[A_XL| A_L| A_M| A_S|
B_M| B_S| C_S],可选,默认B_S
size: "A_XL"
}, function(reqData, opts){//登录成功
//根据返回数据,更换按钮显示状态方法
var dom = document.getElementById(opts['btnId']),
_logoutTemplate=[
'&span&&img src=&{figureurl}& class=&{size_key}&/&&/span&',
'&span&{nickname}&/span&',
'&span&&a href=&javascript:QC.Login.signOut();&&退出&/a&&/span&'
].join("");
dom && (dom.innerHTML = QC.String.format(_logoutTemplate, {
nickname&: QC.String.escHTML(reqData.nickname),
figureurl&: reqData.figureurl
}, function(opts){//注销成功
alert('QQ登录 注销成功');
开发者也可以使用下列函数作为登录成功的回调接收函数:
① 登录成功的回调函数:
cbLoginFun(oInfo, oOpts)
参数说明:
oInfo:当前登录用户的基本信息,即OpenAPI中返回的数据。
参数示例如下:
"nickname":"遲來の垨堠",
"figureurl":"/qzapp//ECCC463F76A2E3C1D9217BBC&,
"figureurl_1":&/qzapp//ECCC463F76A2E3C1D9217BBC&,
"figureurl_2":&/qzapp//ECCC463F76A2E3C1D9217BBC&,
"gender":"男",
"vip":"1",
"level":"7"
oOpts:回传初始化参数,多个按钮时可用来区分来源,用来区分一个页面多个登录按钮的情况。
参数示例如下:
btnId:"qqLoginBtn"
回调函数使用示例如下:
var cbLoginFun = function(){};
QC.Login({btnId:"qqLoginBtn"}, function(oInfo, oOpts){
alert(oInfo.nickname)
② 注销成功的回调函数:
cbLogoutFun()
JS SDK在初始化时会根据浏览器环境创建不同的请求代理,QC.api的每次调用都是一个Request对象。
Request对象的公开方法如下:
.success(resp): Request:请求完成并且返回码为0的回调。
.error(resp): Request:请求完成并且返回码不为0的回调。
.complete(resp): Request:请求完成后的回调。
调用时序为success/error -& complete,每个方法都可以调用多次,每次调用返回Request本身,支持链式调用。
resp参数为回调函数,回调函数参数为Response对象。
Response为Request对象绑定的回调函数的返回参数,每次QC.api调用的异步响应都会返回一个Response对象,该对象在Request对象的success/error -& complete调用流程中传递。
Response的公开方法如下:
.stringifyData:返回该Response对象包含的数据体的文本串。
Response的公开属性如下:
.status:响应状态,-1:代表未知;404:响应错误;200:响应成功。
.fmt:响应数据格式,json/xml。
.code/.ret:响应返回码,0为成功,其他为失败。
.data:响应数据实体,json对象/xml对象。
.seq:响应序号,从1000开始编号。

我要回帖

更多关于 .net腾讯短信接口 的文章

 

随机推荐