十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你是在做企业信息化的初期调研吗,传统的实施方案,要么购买成品软件,要么定制开发。其实还有另一种,就是利用快速开发平台自己搭建,如华创信息管理平台。它无需编程、简单易用,能让用户自己搭建管理软件、自主实施信息化,能容纳并管理各种数据。其好处就是完全按自己的要求弄,可按轻重缓急逐步实施,不会有多余的没用的模块,且后期可随时根据自己需要调整。
多伦网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联自2013年创立以来到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
有了平台,您就能做 ERP、CRM、HR、PM、OA ... 等各种系统,一个平台等值于多套传统软件,比较实用。
1:苹果支付是苹果生态中的小闭环,但是感觉有点坑,测试网速超级慢
2:因为我们app是使用flutter 继续开发,而且属于教育类产品,废话不多说,
3:参照的第三方flutter_inapp_purchase
4:这个集成起来不复制,复杂在苹果搞的这套流程,如果不好好集成还是真不让你审核通过
首先:参照appStore 后台把全部的信息配置完全,请参照:
账户配置好:
最主要的是订单ID和 你在苹果后台配置的一样,
根据产品id 列表获取产品信息(
final ListString _productLists = Platform.isAndroid
? [
'android.test.purchased',
'point_1000',
'5000_point',
'android.test.canceled',
]
: ['1', '2'];)
特别感谢:Flutter iOS 苹果IAP(内购)实现步骤及问题总结(全网最全)
本文由阿里闲鱼技术团队逸昂分享,原题“消息链路优化之弱感知链路优化”,有修订和改动,感谢作者的分享。
闲鱼的IM消息系统作为买家与卖家的沟通工具,增进理解、促进信任,对闲鱼的商品成交有重要的价值,是提升用户体验最关键的环节。
然而,随着业务体量的快速增长,当前这套消息系统正面临着诸多急待解决的问题。
以下几个问题典型最为典型:
1) 在线消息的体验提升;
2) 离线推送的到达率;
3) 消息玩法与消息底层系统的耦合过强。
经过评估,我们认为现阶段离线推送的到达率问题最为关键,对用户体验影响较大。
本文将要分享的是闲鱼IM消息在解决离线推送的到达率方面的技术实践,内容包括问题分析和技术优化思路等 ,希望能带给你启发。
(本文已同步发布于: )
本文是系列文章的第6篇,总目录如下:
《 阿里IM技术分享(一):企业级IM王者——钉钉在后端架构上的过人之处 》
《 阿里IM技术分享(二):闲鱼IM基于Flutter的移动端跨端改造实践 》
《 阿里IM技术分享(三):闲鱼亿级IM消息系统的架构演进之路 》
《 阿里IM技术分享(四):闲鱼亿级IM消息系统的可靠投递优化实践 》
《 阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践 》
《 阿里IM技术分享(六):闲鱼亿级IM消息系统的离线推送到达率优化 》(* 本文)
从数据通信链接的技术角度,我们根据闲鱼客户端是否在线,将整体消息链路大致分为强感知链路和弱感知链路。
强感知链路由以下子系统或模块:
1) 发送方客户端;
2) idleapi-message(闲鱼的消息网关);
3) heracles(闲鱼的消息底层服务);
4) accs(阿里自研的长连接通道);
5) 接收方客户端组成。
整条链路的核心指标在于端到端延迟和消息到达率。
强感知链路中的双方都是在线的,消息到达客户端就可以保证接收方感知到。强感知链路的主要痛点在消息的端到端延迟。
弱感知链路与强感知链路的主要不同在于: 弱感知链路的接收方是离线的,需要依赖离线推送这样的方式送达。
因此弱感知链路的用户感知度不强,其核心指标在于消息的到达率,而非延迟。
所以当前阶段,优化弱感知链路的重点也就是提升离线消息的到达率。换句话说, 提升离线消息到达率问题,也就是优化弱感知链路本身 。
下图一张整个IM消息系统的架构图,感受下整体链路:
如上图所示,各主要组件和子系统分工如下:
1) HSF是一个远程服务框架,是dubbo的内部版本;
2) tair是阿里自研的分布式缓存框架,支持 memcached、Redis、LevelDB 等不同存储引擎;
3) agoo是阿里的离线推送中台,负责整合不同厂商的离线推送通道,向集团用户提供一个统一的离线推送服务;
4) accs是阿里自研的长连接通道,为客户端、服务端的实时双向交互提供便利;
5) lindorm是阿里自研的NoSQL产品,与HBase有异曲同工之妙;
6) 域环是闲鱼消息优化性能的核心结构,用来存储用户最新的若干条消息。
强感知链路和弱感知链路在通道选择上是不同的:
1) 强感知链路使用accs这个在线通道;
2) 弱感知链路使用agoo这个离线通道。
通俗了说,弱感知链路指的就是离线消息推送系统。
相比较于在线消息和端内推送(也就是上面说的强感知链路),离线推送难以确保被用户感知到。
典型的情况包括:
1) 未发送到用户设备:即推送未送达用户设备,这种情况可以从通道的返回分析;
2) 发送到用户设备但没有展示到系统通知栏:闲鱼曾遇到通道返回成功,但是用户未看到推送的案例;
3) 展示到通知栏,并被系统折叠:不同安卓厂商对推送的折叠策略不同,被折叠后,需用户主动展开才能看到内容,触达效果明显变差;
4) 展示到通知栏,并被用户忽略:离线推送的点击率相比于在线推送更低。
针对“1)未发送到用户设备”,原因有:
1) 离线通道的token失效;
2) 参数错误;
3) 用户关闭应用通知;
4) 用户已卸载等。
针对“3)展示到通知栏,并被系统折叠”,原因有:
1) 通知的点击率;
2) 应用在厂商处的权重;
3) 推送的数量等。
针对“4)展示到通知栏,并被用户忽略”,原因有:
1) 用户不愿意查看推送;
2) 用户看到了推送,但是对内容不感兴趣;
3) 用户在忙别的事,无暇处理。
总之: 以上这些离线消息推送场景,对于用户来说感知度不高,我们也便称之为弱感知链路。
我们的弱感知链路分为3部分,即:
1) 系统;
2) 通道;
3) 用户。
共包含了Hermes、agoo、厂商、设备、用户、承接页这几个环节。具体如下图所示。
从推送的产生到用户最终进入APP,共分为如下几个步骤:
步骤1 :Hermes是闲鱼的用户触达系统,负责人群管理、内容管理、时机把控,是整个弱感知链路的起点。;
步骤2 :agoo是阿里内部承接离线推送的中台,是闲鱼离线推送能力的基础;
步骤3 :agoo实现离线推送依靠的是厂商的推送通道(如:苹果的 apns通道 、Google的fcm通道、及 国内各厂商的自建通道 。;
步骤4 :通过厂商的通道,推送最终出现在用户的设备上,这是用户能感知到推送的前提条件;
步骤5 :如果用户刚巧看到这条推送,推送的内容也很有趣,在用户的主动点击下会唤起APP,打开承接页,进而给用户展示个性化的商品。
经过以上5个步骤,至此弱感知链路就完成了使命。
弱感知链路的核心问题在于:
1) 推送的消息是否投递给了用户;
2) 已投递到的消息用户是否有感知。
这对应推送的两个阶段:
1) 推送消息是否已到达设备;
2) 用户是否查看推送并点击。
其中: 到达设备这个阶段是最基础的,也是本次优化的核心。
我们可以将每一步的消息处理量依次平铺,展开为一张漏斗图,从而直观的查看链路的瓶颈。
漏斗图斜率最大的地方是优化的重点,差异小的地方不需要优化:
通过分析以上漏斗图,弱感知链路的优化重点在三个方面:
1) agoo受理率:是指我们发送推送请到的数量到可以通过agoo(阿里承接离线推送的中台)转发到厂商通道的数量之间的漏斗;
2) 厂商受理率:是指agoo中台受理的量到厂商返回成功的量之间的漏斗;
3) Push点击率:也就通过以上通道最终已送到到用户终端的消息,是否最终转化为用户的主动“点击”。
有了优化方向,我们来看看优化手段吧。
跟随推送的视角,顺着链路看一下我们是如何进行优化的。
用户的推送,从 Hermes 站点搭乘“班车”,驶向下一站: agoo 。
这是推送经历的第一站。到站一看,傻眼了,只有不到一半的推送到站下车了。这是咋回事嘞?
这就要先说说 agoo 了,调用 agoo 有两种方式:
1) 指定设备和客户端,agoo直接将推送投递到相应的设备;
2) 指定用户和客户端,agoo根据内部的转换表,找到用户对应的设备,再进行投递。
我们的系统不保存用户的设备信息。因此,是按照用户来调用agoo的。
同时: 由于没有用户的设备信息,并不知道用户是 iOS 客户端还是 Android 客户端。工程侧不得不向 iOS 和 Android 都发送一遍推送。虽然保证了到达,但是,一半的调用都是无效的。
为了解这个问题: 我们使用了agoo的设备信息。将用户转换设备这一阶段提前到了调用 agoo 之前,先明确用户对应的设备,再指定设备调用 agoo,从而避免无效调用。
agoo调用方式优化后,立刻剔除了无效调用,agoo受理率有了明显提升。
至此: 我们总算能对 agoo 受理失败的真正原因做一个高大上的分析了。
根据统计: 推送被 agoo 拒绝的主要原因是——用户关闭了通知权限。同时,我们对 agoo 调用数据的进一步分析发现——有部分用户找不到对应的设备。 优化到此,我们猛然发现多了两个问题。
那就继续优化呗:
1) 通知体验优化,引导打开通知权限;
2) 与agoo共建设备库,解决设备转换失败的问题。
这两个优化方向又是一片新天地,我们择日再聊。
推送到达 agoo ,分机型搭乘厂商“专列”,驶向下一站:用户设备。
这是推送经历的第二站。出站查票,发现竟然超员了。
于是乎: 我们每天有大量推送因为超过厂商设定的限额被拦截。
为什么会这样呢?
实际上: 提供推送通道的厂商(没错, 各手机厂商的自家推送通道良莠不齐 ),为了保证用户体验,会对每个应用能够推送的消息总量进行限制。
对于厂商而言,这个限制会根据推送的类型和应用的用户规模设定——推送主要分为产品类的推送和营销类的推送。
厂商推送通道对于不同类型消息的限制是:
1) 对于产品类推送,厂商会保证到达;
2) 对于营销类推送,厂商会进行额度限制;
3) 未标记的推送,默认作为营销类推送对待。
我们刚好没有对推送进行标记,因此触发了厂商的推送限制。
这对我们的用户来说,会带来困扰。闲鱼的交易,很依赖买卖家之间的消息互动。这部分消息是需要确保到达的。
同样: 订单类的消息、用户的关注,也需要保证推送给用户。
根据主流厂商的接口协议,我们将推送的消息分为以下几类,并进行相应标记:
1) 即时通讯消息;
2) 订单状态变化;
3) 用户关注内容;
4) 营销消息这几类。
同时,在业务上,我们也进行了推送的治理——将用户关注度不高的消息,取消推送,避免打扰。
经过这些优化,因为超过厂商限额而被拦截的推送实现了清零。
通过优化agoo受理率、厂商受理率,我们解决了推送到达量的瓶颈。但即使消息被最终送达,用户到底点击了没有?这才是消息推送的根本意义所在。
于是,在日常的开发测试过程中,我们发现了推送的两个体验问题:
1) 用户点击Push有开屏广告;
2) 营销Push也有权限校验,更换用户登陆后无法点击。
对于开屏广告功能,我们增加了Push点击跳过广告的能力。
针对Push的权限校验功能,闲鱼根据场景做了细分:
1) 涉及个人隐私的推送,保持权限校验不变;
2) 营销类的推送,放开权限校验。
以上是点击体验的优化,我们还需要考虑用户的点击意愿。
用户点击量与推送的曝光量、推送素材的有趣程度相关。推送的曝光量又和推送的到达量、推送的到达时机有关。
具体的优化手段是:
1) 在推送内容上:我们需要优化的是推送的时机和相应的素材;
2) 在推送时机上:算法会根据用户的偏好和个性化行为数据,计算每个用户的个性化推送时间,在用户空闲的时间推送(避免在不合适的时间打扰用户,同时也能提升用户看到推送的可能性)。
3) 在推送素材上:算法会根据素材的实时点击反馈,对素材做实时赛马。只发用户感兴趣的素材,提高用户点击意愿。
通过以上我们的分析和技术优化手段,整体弱推送链路链路有了不错的提升,离线消息的到达率相对提升了两位数。
本篇主要和大家聊的是只是IM消息系统链路中的一环——弱感知链路的优化,落地到到具体的业务也就是离线消息送达率问题。
整体IM消息系统,还是一个比较复杂的领域。
我们在消息系统的发展过程中,面临着如下问题:
1) 如何进行消息的链路追踪;
2) 如何保证IM消息的快速到达(见《 闲鱼亿级IM消息系统的及时性优化实践 》);
3) 如何将消息的玩法和底层能力分离;
4) 离线推送中如何通过用户找到对应的设备。
这些问题,我们在以前的文章中有所分享,以后也会陆续分享更多,敬请期待。
[1] Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
[2] 一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践
[3] 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等
[4] 一套亿级用户的IM架构技术干货(下篇):可靠性、有序性、弱网优化等
[5] 从新手到专家:如何设计一套亿级消息量的分布式IM系统
[6] 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等
[7] 融云技术分享:全面揭秘亿级IM消息的可靠投递机制
[8] 移动端IM中大规模群消息的推送如何保证效率、实时性?
[9] 现代IM系统中聊天消息的同步和存储方案探讨
[10] 新手入门一篇就够:从零开发移动端IM
[11] 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
[12] 移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
[13] IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
[14] IM消息送达保证机制实现(二):保证离线消息的可靠投递
[15] 零基础IM开发入门(一):什么是IM系统?
[16] 零基础IM开发入门(二):什么是IM系统的实时性?
[17] 零基础IM开发入门(三):什么是IM系统的可靠性?
[18] 零基础IM开发入门(四):什么是IM系统的消息时序一致性?
(本文已同步发布于: )
第一章
活着的男孩
家住在女贞路4号的杜思丽夫妇总是得意的说,他们是非常本份的人家,谢天谢地。他们是最不可能被认为卷入到一些奇怪和神秘的事情的人。因为他们从来都不认可那些虚无缥缈的事。
杜思丽先生在一个名叫布朗宁的公司做主管,公司主营钻床制造。他高大健硕,胖的几乎没有脖子,却留着很大的胡子。杜思丽夫人身材纤细,留着一头金发,近乎两倍长于常人的脖子,这让她时常非常便利地把脖子伸出栅栏,窥视邻居。杜思丽一家有一个小儿子名叫大力,在他们看来,世间再也找不到像大力这么好的孩子了。
杜思丽一家拥有他们想要的一切,但除此之外,他们保守一个秘密,他们最害怕被别人们发现。如果被人发现有关波特一家的秘密,他们会承受不住的。波特夫人是杜思丽夫人的妹妹,但是他们有好几年有没有见面了。事实上杜思丽夫人假装她没有这个妹妹,因为她的妹妹及不中用的妹夫,和杜思丽一家处世方式完全不同。他们一想到邻居议论波特一家是否会回到这条街,就怕得浑身发抖。他们知道波特家有一个小儿子,但他们从来没有见过。这个男孩是他们远离波特一家很好的理由,因为他们不想要大力和这样的小孩厮混在一起。
故事开始于天色阴沉,灰暗的周二早晨,杜思丽夫妇一早醒来,窗外低沉的云天没有丝毫迹象预示在这个城镇将要发生奇怪和神秘的事情。杜思丽先生哼着小曲,挑选一条最不喜欢的领带去上班,杜思丽夫人不停地絮叨,高兴地把哭闹的大力搬到儿童椅子上。
然而,没有任何人注意到一只巨大的、褐色的猫头鹰挥着翅膀从窗外穿过。
八点半,杜思丽先生拾起他的公文包,轻吻杜思丽夫人的面颊,然后尝试和大力吻别,但是却失败了,因为正赶大力发了个脾气,把她的早餐奶扔到了墙上。“小淘气”杜思丽先生咯咯笑着离开了房子。他钻进汽车,并倒出4号路。
在大街的拐角,他注意到了奇怪的信号,一只猫正在看一副地图。过了一秒钟,杜思丽先生没有意识到他看到了什么——就在那时,他猛然转过头去一看究竟,那里只有一只花猫站在女贞路路口,但是并没有看到地图。他到底在想些什么?很可能是光线产生的错觉吧?杜思丽先生眨着眼睛,并盯着那只猫,猫也在盯着他。杜思丽先生转过了街角,上了大道。他从后视镜再去看那只猫,它正在看写着女贞路的路标——不,它只是在看路标;猫是不会阅读地图或路标的。杜思丽先生稍微振作了一下,并尝试把猫从脑海里赶走。他向着城里的方向开,脑海中想的是希望今天能得到一大批钻床的订单。
(未完待续)20180226
Chapter 1
THE BOY WHO LIVED
Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you very much. They were the last people you'd expect to be involved in anything strange or mysterious, because they just didn't hold with such nonsense.
Mr. Dursley was the director of a firm called Grunnings, which made drills. He was a big, beefy man with hardly any neck, although he did have a very large mustache. Mrs. Dursley was thin and blonde and had nearly twice the usual amount of neck, which came in very useful as she spent so much of her time craning over garden fences, spying on the neighbors. The Dursleys had a small son called Dudley and in their opinion there was no finer boy anywhere.
The Dursleys had everything they wanted, but they also had a secret, and their greatest fear was that somebody would discover it. They didn't think they could bear it if anyone found out about the Potters. Mrs. Potter was Mrs. Dursley's sister, but they hadn't met for several years; in fact, Mrs. Dursley pretended she didn't have a sister, because her sister and her good-for-nothing husband were as unDursleyish as it was possible to be. The Dursleys shuddered to think what the neighbors would say if the Potters arrived in the street. The Dursleys knew that the Potters had a small son, too, but they had never even seen him. This boy was another good reason for keeping the Potters away; they didn't want Dudley mixing with a child like that.
When Mr. and Mrs. Dursley woke up on the dull, gray Tuesday our story starts, there was nothing about the cloudy sky outside to suggest that strange and mysterious things would soon be happening all over the country. Mr. Dursley hummed as he picked out his most boring tie for work, and Mrs. Dursley gossiped away happily as she wrestled a screaming Dudley into his high chair.
None of them noticed a large, tawny owl flutter past the window.
At half past eight, Mr. Dursley picked up his briefcase, pecked Mrs. Dursley on the cheek, and tried to kiss Dudley good-bye but missed, because Dudley was now having a tantrum and throwing his cereal at the walls. "Little tyke," chortled Mr. Dursley as he left the house. He got into his car and backed out of number four's drive.
It was on the corner of the street that he noticed the first sign of something peculiar -- a cat reading a map. For a second, Mr. Dursley didn't realize what he had seen -- then he jerked his head around to look again. There was a tabby cat standing on the corner of Privet Drive, but there wasn't a map in sight. What could he have been thinking of? It must have been a trick of the light. Mr. Dursley blinked and stared at the cat. It stared back. As Mr. Dursley drove around the corner and up the road, he watched the cat in his mirror. It was now reading the sign that said Privet Drive -- no, looking at the sign; cats couldn't read maps or signs. Mr. Dursley gave himself a little shake and put the cat out of his mind. As he drove toward town he thought of nothing except a large order of drills he was hoping to get that day.
主要是本人是全栈架构师,做的了业务,写的了前后端代码,自个运维也没问题。做过某些企业高管。受够替老板背锅,当工具人被企业用完就扔的日子了。其他人引以为戒啊。
其实出来单干,我觉得如果你技术过关了,差的是销售和产品,具体是指销售思路和方向,产品是指产品解决方案,怎样才能更好的对接好客户。如果才开始,你面对的困难是,技术方面,自己全做,精力会跟不上,有段时间没收入;其次销售思路和方式一定要想好;再就是产品设计,如果用技术员的思维去设计产品,我想告诉你的就是,这个产品趁早放弃。所以你现在面对的是,前期没收入,全是花钱。然后你的了解销售,产品经理,技术员。几乎所有的工作你都得包揽,非常心累。如果你有很多资金,当我没说。
再就是找合伙人,这个非常难,如果你没有明确的方向,对除了技术外的不了解,剩下给你的除了一地鸡毛,什么都剩不下。当你有了明确的方向,具体事物都有计划后,才能找合伙人,人品最重要。总之把希望寄托于合伙人时,你就已经失败了一半了。
我当时出来创业,是靠以前积累的老关系网,找了5个第一批客户,然后做出了口碑,后来老客户帮忙介绍新客户,慢慢转了起来
如果是接单,要单干,最基本的必须是全栈。前后端能搞定,然后是服务器的维护,这些具备了然后就是找客户并拿下订单,应付客户的各种刁难。
如果自己做,还要学会运营,了解国家政策(这里不注意,一不留神服务器就被停了)。
总之,很多事是要学的,在一次次的失败中匍匐前进,会耗费很多精力时间,还有可能吃力不讨好,总结:转行吧!
你是前辈,我才31,我觉得在单干之前你得综合考虑清楚成本,起码你现在已经有一份稳定的副业收入,这样创业初期即使一直没客户也能靠副业过渡,你的企业才可以慢慢的逐步扎根发展,才会越来越好。
找个合伙人
,他负责销售
这个问题很复杂,因为大家都认为会编程就能创业,那是把问题看简单了。创业的前题需要知道是市场的需求,同时看你如何能够满足需求。再就是你只是掌握了技术,掌握的程度也不尽相同,与年龄也不是关系很大。找客户那是做传统软件的思路,需要的不是看编程技能的。
18年生病以后在一个小公司,今年接了一个教学系统的项目,客户要的内容很充实,自己一个人干后端SpringBoot,前端Vue,App用Flutter,自己测试,自己部署。客户还挺满意。我也快40的人了。自己干的多,工资不多。
百度上买关键词
找到多家开发公司,谈业务合作,要多家,东窗不亮西窗亮嘛。有些公司他们也乐意将业务一部分外包,这样他们又不需要养人。是双赢。但是前提是你要懂得忘记知识产权这个词。当拥有优势时再帮忙售后,也可以赚钱。