最近读了《有效竞品分析》这本书,书中系统地介绍了竞品分析方法论,全面、透彻,收获颇多;为了更好地形成知识体系,加深理解和印象,书写成文,分享给现在看到的你。
书中说这是好产品必备的竞品分析方法论,作为设计师,总说要有产品思维,那么学习产品必备技能,便是一个培养产品思维的重要途径。
这篇小文,将从四个模块讲述如何有效竞品分析。
竞品分析顾名思义,是对竞争对手的产品进行比较分析。
不同的角色做分析的方向是不同的,UX设计师做产品体验分析,从视觉和感觉两个方面去分析;产品经理做竞品分析从功能、框架、技术、战略等,分析产品背后的部分,比如竞品为什么这么做?是如何做到的?下一步会怎么做……这里作者主要是分析产品层面的竞品分析。
竞品分析的意义根据产品发展阶段不同,可归纳为以下四点:
通过竞品分析,可以快速了解这个行业、市场、竞争对手的产品以及自己的产品。
从产品战略层面来说,可以为企业制定战略、布局规划提供依据;可以通过MVP来测试产品是否符合市场预期,找准产品定位。
做竞品分析会让我们时刻关注竞争对手,关注环境的变化,关注政策的变化等,有效的竞品分析可以预警避险。
定方向、定目标、定策略,包括竞品分析、用户研究、需求分析、产品规划、产品设计等。
输出一份完整的竞品分析,需要完成六个核心流程:
明确目标:明确为什么要做、想解决什么问题、竞品分析的目标是什么
选择竞品:选择要分析的竞品、直接竞品、间接竞品、参照品
确定分析维度:根据竞品分析目标,确定要从哪些维度分析竞品
收集竞品信息:从各种渠道收集竞品信息
信息整理与分析:对收集到的竞品信息进行整理与分析
总结报告:得到竞品分析的结论,输出竞品分析报告
在第一部分全面认识竞品分析中有提到竞品分析的意义,也是竞品分析的目标所在,概括的可以分为四类:决策支持、学习借鉴、市场预警、机会探索。
根据产品生命周期不同,竞品分析的目标和侧重点不同。所以在竞品分析之前一定要了解当前产品处于什么阶段,需要分析的目标是什么。
竞品的选择,首先要了解竞品的分类:直接竞品、间接竞品、替代品、参照品。然后根据目标针对性的选择产品。
直接竞品
是指产品形式和目标用户群是完全相同的产品。比如生活中最鲜明的例子:可口可乐 VS 百事可乐。
间接竞品
是指产品形式不同,目标用户群类似的产品。比如:可口可乐 VS 元气森林,都是饮品。
替代品
是指产品形式不同、品类不同,目标用户群类似,能满足用户相同需求的产品。比如:公交车 VS 滴滴打车。
参照品
是指有参考价值的产品,可能是跨界的各种产品,开放式的产品类别。
竞品的选择不是数量越多越好,而是要选择合适的,做深度分析,分析出有价值的信息。
分析维度是指从哪些方面、哪些角度去分析,在这个阶段要确定产品分析的广度和深度。可以从产品视角和用户视角两个不同的视角去确定分析维度。
产品视角:从产品本身的信息量上去选择要分析的维度。以功能、框架、技术、体验、用户……等维度进行分析;
用户视角:从用户最关注的信息上去选择要分析的维度。以$APPEALS(客户需求分析)框架作为分析框架。
$APPEALS方法是IBM在IPD总结和分析出来的客户需求分析的一种方法。它从8个方面对产品进行客户需求定义和产品定位。具体如下:
$-产品价格(Price);
A-可获得性(Availability);
P-包装(Packaging);
P-性能(Performance);
E-易用性(Easy to use);
A-保证程度(Assurances);
L-生命周期成本(Life cycle ofcost);
S-社会接受程度(Social acceptance)。
收集竞品信息的渠道总结为三种:官方渠道公开资料、第三方竞品分析平台获取、打入产品自行体验或与用户接触调研出来的等。
在之前公众号文章里曾分享过有关用户分析、产品分析等数据分析平台的汇总表。
信息收集完成后,并不是所有信息都是可用的,需要对其进行筛选、分类、剔除、评级等,得到有效信息,针对有效信息进行分析。
这里也是竞品分析重要的一个环节,不同的目标,需要选择不同的分析方法,汇总一下竞品分析的方法有:比较法、矩阵分析法、竞品跟踪矩阵、功能拆解、探索需求、PEST分析、波特五力模型、SWOT分析……(下一部分会具体讲解)
所有的分析步骤都完成之后,需要对分析结果进行总结,从中挑选出有价值的信息,形成一份分析报告,报告的格式可根据展示场景输出选择适当的格式。
与竞品做横向比较,深入了解竞品,并通过分析得出优势、劣势。
打勾比较法:有无某功能,如果产品功能复杂,要拆解成2级功能等再横向比较
评分比较法:应用于用户体验设计评估和$APPEALS要素评估
描述比较法:通常会用“界面截屏+文字描述”的形式
以二维矩阵的方式分析产品与竞品的定位、特色或优势。
跟踪竞品的版本更新,找到竞品各版本的发展规律,以推测竞品下一步的行动计划。竞品跟踪矩阵包括几个要素:时间、版本号、版本变化要点(新增、优化、删除)以及外部环境变化。
把竞品分解成1级功能、2级功能、3级功能,甚至4级功能,以便更全面地了解竞品的构成,避免遗漏。
挖掘竞品功能所满足的深层次的需求,以便找到更好的解决方案,提升产品的竞争力。
PEST分析法是对宏观环境进行分析,以便找到机会,认清威胁与挑战。
所谓PEST ,P是政治(Politics),E是经济(Economy),S是社会(Society),T是技术(Technology)。
对行业环境进行分析,评估某一行业的吸引力、利润率。
PEST分析和波特五力模型可归纳出SWOT分析中的机会和威胁,通过SWOT分析找出产品的优势、劣势、机会、威胁,以便制定竞争策略。
产品越发展难免会进入同质化的竞争,与其更好,不如寻找更好的机会点。在竞品的基础上做“加减乘除”,以便进行差异化创新。
借助精益画布、竞品画布、战略画布这三个工具可以提升竞品分析的效率。
精益画布是关于产品商业模式分析的一种很实用的工具,可以用来做产品商业模式规划和分析。精益画布可以帮助产品更全面的思考、决策,从系统、商业的角度来规划产品、分析产品,建立产品的全局观。
精益画布在日常工作中的使用场景包含:编写PRD、项目立项、商业计划书……
知己 用精益画布--规划自己的产品
知彼 用竞品画布--规划竞争对手的产品
竞品画布是前面提到的竞品分析的一种方式,是把竞品分析的六个步骤固化到一张表上,作为一个规范性的模板,引导大家更规范的做竞品分析。
竞品画布相当于竞品分析报告的MVP(最小可用产品),用来低成本快速验证分析的思路是正确的,避免返工。
很多人在刚接触一个新产品时,很容易盲目的去分析,找不到方向,此时借助竞品画布这个标准化的模板,一步步的去分析产品,可以很快地了解一个产品。
战略画布是做产品差异化竞争的有效工具,是通过价值曲线的方式,在某一时间段内寻找到有用户价值的战略方向。
价值曲线
价值曲线是以图形的方式描绘出一个产品在各个竞争元素上表现得相对强弱程度,由此可以看出一个产品的战略轮廓。
横坐标显示产品的竞争元素、价值点(用户在意点)等,通过用户的评价就可以了解到对于用户来说他们最在意的是什么,他们使用产品的原因是产品给他们带来了什么,这就是要寻找的竞争元素的来源。
纵坐标显示相对水平。
通过价值曲线的方式,可以清晰的看到产品与竞品间的差异点,战略画布是做产品差异化创新的有效工具。
最后,利用思维导图结构化的方式,整合了竞品分析核心知识点,分享给看到的你:
看似这些竞品分析的方法论是在做一些与设计无关的事情,但很多方法论是通用的,可以应用到视觉、交互的竞品分析当中;作为设计师不能给自己设限,要多去学习跨界的知识,了解这些竞品分析的方法论后,以后再接触新项目,便可以借助文中的规范尝试做竞品分析,助力自己快速了解业务、行业等。
总之,多读、多看、多学,步履不停……
蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
世界中从不缺少的就是对比,人和人的对比,价格和价格的对比,生活和生活的对比,而今天我说的,是设计中的对比,是按钮、颜色、排版布局的对比,设计中通过有效的对比技法,可以更加快速的传递产品信息,从而提升用户体验。
对比,是把具有明显差异、矛盾和对立的双方安排在一起,进行对照比较的表现手法。对比是把对立的意思或事物、或把事物的两个方面放在一起作比较,让读者在比较中分清好坏、辨别是非。
那么,为什么说对比度很重要呢?因为人眼最快速捕捉到的就是对比度。而图像的最高可能对比度,我们称它为对比度或动态范围。更重要的是,对于色盲等弱视视觉障碍的人来说,对比度显得更加重要,因为事物的对比度是成为他们看到的物体的核心特征,使他们能够区分它们,没有了对比度,对他们而言,也就失去了视觉。
在学术艺术中,对比是处理对立元素和效果的一种排列方式,例如:明暗颜色、大小形状、粗糙或光滑的纹理。在这种情况下,对比不仅可以用来吸引注意力,还可以设置情绪和氛围,在艺术品中创造多样性、视觉趣味和戏剧性。
在设计中,对比度还是影响效果的关键因素之一。 不管是PC端网页还是手机中的APP,它们的视觉层次、结构,设计师在通过对比度设计后,也能够以一种独特的方式呈现,并告知用户哪些交互点是重要的,哪些是次要的。同时,对比度还可以有效地吸引用户的注意力并将其吸引到特定元素上,因此它在产品的直观引导和可用性方面也发挥着重要作用。
Lucibel的网站设计展示了纯粹的单色颜色对比,为页面构建了坚实的视觉层次结构。
LAUDEMIO的品牌网站使用黑色背景和产品主体进行层次分离,最后加上白色文案说明
对比在UI中具有很多不同的特征属性,其中就包括:
颜色:颜色是人眼最快发现和最明显对比之一,它适用于各种内容下使用,例如:通过互补色、对比色或类似色进行多种组合。这鞋方式最广泛地用于洁面按钮、导航、卡片、产品背景等地方,就是希望用户能在打开的第一时间看到,并快速进行操作使用。
大小:这种对比类型是希望重要元素或内容首先引起用户注意所使用的,多数情况下设计师会将元素设计成明显大于其他元素。
形状:这种对比类型属于形状改变,通过使一个元素的形状与其他元素不同来吸引用户的眼球。
位置:在这种类型中,设计师以这种方式更改行中一个元素的位置,使其看起来不同,我们看到最多的这种对比案例就是阅读文本片段时,新段落会以缩进开头。
纹理:这里的差异是由于使用彼此明显区分的纹理而建立的。
方向:在这里,设计师通过更改元素的物理位置,使其使用其他或意想不到的方向进行,通过这种不寻常的方式来吸引用户的注意力。
以上这几种对比类型,我现在通过可视化的方式为大家呈现一遍,这样可以加深大家对对比的理解。
不同特征属性的对对比方式
其实,多数人只要想到对比,我想第一想到的会是黑白的东西吧。在没有阴影和多种颜色的情况下,单色的对比度是表现潜力最好的形式。更重要的是,与艺术品或摄影作品相比,对比度不仅会影响美感,而且对布局的可用性和可见性也有重大影响。因此,对比度的使用应该算是用户最友好、最易于使用的方法了。
F2Pool APP的界面中,颜色对比有助于数据和内容形成分割,便于用户阅读使用
区块链APP界面通过使用多色的插画设计,使整体产品更加具有活力和动感,同时吸引力更强
根据相关数据结果表明,“黑白”的配色方式,是对用户帮助和引导最大的。所以,使用黑白配色进行对比,可以有效提升用户的体验。当然,多色对比也是可以的,这里我提供一个色轮配色法,大家可以自行采纳。
该色轮可以帮助设计师找到最佳水平的颜色组合
除了刚才说到的哪些,接下来我在说一种对比类型,它主要是基于字体的区别进行做排版对比的。
这里提供几种关于字体、排版的对比方式:
尺寸:通过对字体字号的设定进行对比实现,可以有效的展示主次分明。比如以及标题使用30px的字号,而内容文本则使用24px的字号。
重量:主要的方式是将字体加粗呈现,在视觉上看起来更加具有厚重感,这样加粗的文本在视觉上会更加具有地位和突出性。
结构:形式在这里可以理解成是字体的字像,通过改变字体字象进行区别,比如标准的苹方体和花体就是很好的视觉对比。
形式:将字体加以倾斜,也可以呈现出不一样的结果。
颜色:这里的颜色不光是指字体颜色本身,同时也可以为字体添加背景色,用来衬托字体。
方向:通过改变单个字体的方向、或一句话的排列方向,都可以形成有效的对比效果。
艺术学院概念展示的不同类型排版对比
说了刚才那么多,可能你已经抓住了设计的要害,那就是对比度越高,设计就越好。其实,并不是这样的,任何事物都需要掌握一个度,超过那个度,有时候就会适得其反。虽然我们知道对比度会使内容更加明显,但是你还应该知道,过高的对比度也会使用户感到疲劳。按照文本视觉呈现的正确比例,我们应该将对比度控制在7:1之间才是比较合适的选择。
在当前这个概念APP界面中,通过明显的颜色来提升按钮的视觉焦点,同时,加粗的文本也是重点提醒,这些手法都是便于阅读和操作的方式
除了刚才说到的这些对比方式和规则外,作为设计师,还应该考虑的一些问题。
内容加在了图片上,要是用高对比度
由于图片本身的体积较大,覆盖面积也大,所以用户在浏览时,视觉很容易会被图片吸引过去,但是,由于图片内容的情况,很多相关文案就会显得柔弱不堪,在这种情况下,一般的对比就无法解决视觉问题了,而是需要你加大提高文案和背景的对比,比如使用了类似黑色图片的背景,就要使用纯白色文本,如果使用了亮色的图片背景,文本就需要考虑使用暗色。
注意对比度给用户带来的伤害
这种情况多数出现在阅读类产品上,比如我们日常使用的小说类app,产品里就有一种功能叫做背景自定义,它的主要目的就是担心用户在长时间阅读的情况下产生视觉疲劳,所以需要设计柔和的背景进行自定义切换。有的产品还会增加字体大小、颜色修改、夜间模式等多个功能,都是为了降低对比度,使用户在体验上不再那么刺眼。
留白的重要性
留白是极其重要的设计手法之一,它同样是产生对比的好技法,通过给产品界面留有适当的空白余地,可使产品具有通透感,用户在使用产品时也不会产生压抑,另外由于留白是大面积的空白空间,这也就产生了和密集内容的强烈对比。
最后总结一下所有的内容,我们可以定义一下对比度的几个关键优势和好处:
更强的视觉层次
更好的专注
创意氛围
增强可读性
与人类自然感知和反应的对应
生活充满了对比,无论你会采取什么方面。对于所有的生命,我们必须学会如何接受这一点,并尝试享受如此多样化和不可预测的生活。与现实相呼应,设计也充满对比,并尽可能多地借鉴。
蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
当你在一个既定的服务领域工作,但想要进行革新时
1.详细研究当前的用户体验
分析当前的服务体验,解读用户旅程中涉及到的行为,接触点,出现的痛点。构建现有的体验旅程图可以捕捉到服务体验的全貌,立即发现需要重新设计的关键问题,促进组织内部的一致性。对于这种复杂的服务,根据分析结果建立服务蓝图也大有好处,可以捕捉到流程中的关键问题还有不同接触点的关系中的重要方面。
建议:
自己进行尝试,能够有效地发现细节,涵盖分析中的所有步骤。
2.分析服务构建
体验和过程只是服务的一部分:在分析现有服务时,我们也要考虑底层系统是如何搭建组件和动态结构的。只有对系统进行全面理解,我们才能发现连接缺失,精力和资源的潜在浪费和重复。创建一个系统地图有助于让团队成员明确这些问题,讨论潜在的改善机会。
建议:
我们需要将系统中的所有行为者联系在一起,全面理解系统过程,减少重复,弥补差距。
3.设定具体的目标,指导设想
在开始构思之前,花些时间来思考系统和体验的分析结果,并通过重新设计确定自己达到的关键目标。目标可以是横向的(比如 “优化整个旅程中的信息流”),也可以是非常具体的(比如 “入职:从填写表格到热情的欢迎会”)。最重要的是,我们首先要详细了解现状,才能设定目标,制定正确的方法,同时意识到急需解决的潜在局限性和障碍。
建议:
我们也可以将期待体验设定为目标旅程,为体验中的每一步设定一个具体目标。
4.创造新点子和解决办法
提出新的想法,解决旅程中所有已知痛点或系统中的差距,以及抓住有趣的机会。这些想法包括既稍微改进一些特定功能,也可以影响整个服务模式的宽泛概念。在这个阶段,不要限制自己的想法数量,更不用考虑可行性:捕捉每一个想法,与其他团队成员分享,并在彼此的思考之上建立一个新想法。
建议:
快速构思是一种头脑风暴的练习,团队中的每个人都写下他们心中的每一个想法,然后再进行小组讨论。
5.确定最有可能实现的概念
收集所有想法,确定下一步的行动计划。如果项目很简单,我们可以简单地将所有的想法整合成一个重新设计方案,逐步发展。在其他情况下,你可能最终得到50多个想法,对当前的服务体验进行创新,但显然我们不能诉诸于每个想法,那么……从哪着手呢?我们可以建立一个评估矩阵,确定标准,分析每个概念(例如,对用户的价值,实施成本,独特性等),并对它们进行相应的评分。这样我们就可以筛选出最有可能实现的想法,创造较大的价值(这些想法可能是最先开发的)。简略的概念可以很好地改善部分服务,但不会产生较大的影响(容易实现的目标);而较复杂的概念从长远来看会对服务体验产生更积极影响,但需要投入大量的时间和精力。
建议:
我们需要考虑的最核心内容是新概念给用户和组织带来的价值,而不是实施的可行性或复杂性-但这可以根据具体环境而改变。
蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
若想战胜竞争对手,产品无疑需要在设计上做好提前规划,并时刻树立优化意识,尽量满足用户的体验期望。然而研发团队有时总容易陷入误区,本篇文章里,作者就产品研发过程中可能忽略的、对用户体验具有破坏性的因素做了总结,一起来看一下。
毫无疑问,要想获得出色的用户体验 (UX) 需要在数字世界中保持竞争优势。尽管如此,由于某些关键盲点,改善用户体验的努力并不总能取得成功。如果忽略这些盲点,那么无论预算大小和团队的努力如何,失败都会预先留存在项目中。事实上,如果实施不准确,可能会导致所谓的“经验差距”造成的设计上的损失。
上图所示的具体案例:某银行投资了近 50 万美元改进其手机银行应用程序,却导致整体客户满意度下降。其根本原因是金融公司未能发现和预防不同级别的内部经验差距。那么,该如何及时识别和避开这些盲点,以保障耗资巨大的大规模数字化项目的成功呢?
在过去十年中,大量研究证实,用户体验对公司市场效率存在优先影响。根据甲骨文的一份报告,如果糟糕的用户体验导致多个业务问题,那么积极的用户体验会增加推荐、保留率和收入,因为 86% 的客户愿意为更好的用户体验支付更多费用。
看起来一切都很简单——只要增加预算和成本,就足以提供最好的体验?但在实际操作中,这并不容易。根据贝恩公司的研究,80% 的 CEO 认为他们提供了卓越的体验,而只有 8% 的客户同意这一点。
其主要原因可以用“经验鸿沟”来解释——这是客户期望的体验与他们从数字服务中获得的体验之间的负面差异。如果体验比预期的差很多,就会产生许多令人不快的后果,比如客户忠诚度下降、大量负面评论,甚至客户决定离开品牌。
在大多数情况下,人们往往无法认识到真正的经验鸿沟。
即使公司的领导和员工觉得有些地方不对劲,他们也往往不明白“要改进什么”以及“为什么要改进”。如果没有意识到某件事,就不可能管理它。
为了解释“经验鸿沟”可能导致麻烦的基本原理,我想分享一个现实生活中的例子。
几年前,一家知名且受人尊敬的中欧银行开始了大规模的数字化转型之旅。当时,该银行的应用程序的评级为 3.5,并且已经过时。所以,为了实现数字化、提升银行形象,并在不断增长的数字市场中获得竞争机会,管理层打算紧急创建并推出一款现代化的银行应用程序。因此,最初的设计和开发周期为 6 个月。
尽管如此,银行还是花了三倍时间(1 年零八个月)自主构建新应用程序。无论从时间来说,还是从投资预算来说,这都可以称得上是一个重要项目。从项目的范围、所做改进和时间表来看,总成本估计在 50 万左右。
然而,结果完全没有达到预期。新应用发布后,它从之前的 3.5 下降到 2.4,并且因为它没有改进,以至一年后,其评分仍在下降,其用户体验也日渐恶化。
银行尽一切努力改善用户体验,整个团队努力工作近两年,怎么会发生这种情况?
这种情况的产生,正是由于“经验鸿沟”的存在。尽管该银行启动数十名顶级专业人士花费了 20 个月和 50 万来改良产品,但它仍未满足用户的期望。
虽然客户不满意的真正原因是无意识的“体验鸿沟”,但公司往往倾向于通过指责外部环境来解释它。例如市场的变化、竞争对手的活动、创新的出现、消费模式的变化。当然,这也是客观事实,但一家适应性强的公司应该考虑将这些因素用于其增长,而不是作为“替罪羊”。
但衡量适应效果的最重要方式是公司服务在多大程度上满足甚至超过了消费者的期望。没有意识到他们服务和客户期望之间存在差距的公司注定无法适应外部环境的变化。
在某些情况下,公司的行为甚至会导致经验鸿沟扩大到临界水平。这通常会导致目标客户对公司产品和服务的需求急剧下降。
如果我们回到这个例子,似乎管理层对重大改进是否可以成功充满信心,并投入了大量资金和精力进行广告宣传。同时,那些宣传此应用程序现代、创新和友好的广告,激发了消费者的高期望,以至于大大超出了其服务的实际质量。
结果,当产品最终发布时,客户惊讶地发现他们的期望落空了,新应用程序比改良前更糟糕。并且相关的负面评论不仅出现在 App Store 和 Google Play 上,也在社交媒体上大量涌现,人们在推特上不断讽刺该银行失败的数字化项目。
接下来,让我们探讨一下数字服务和用户期望之间的鸿沟是如何形成的,以及为什么没有人能够阻止它。
事实上,最大的挑战是大家往往很难注意到这些差距。他们的原因并不明显,并且可以同时存在于各个组织架构之上。此外,它们的影响令人难以察觉,以至于最终会导致意想不到的破坏性后果。最终,直到团队面对产品在市场上的失败,才有人明白原因是什么。
弥合鸿沟的主要困难在于,级别越高,对经验鸿沟的不了解程度越高。实际上,在组织架构的顶部,通常会找到造成鸿沟的根源。级别越低,离用户越近,员工越能觉察到问题和差距,但他们往往没有权力和能力去消除它们,他们受制于文化。
在这种特殊情况下,售后部门每天都会接到数千个关于产品问题的电话,但由于业务流程分散,他们对此也无能为力。
客户的挫败感变得更加强烈。即使是最简单的日常场景,他们面临的问题也难以执行,但他们从银行员工那里得到的反馈是,他们并不是唯一产生困惑的人,而且目前银行正忙于交付新功能,而不是修复当前问题。
使事情变得复杂的是,经验鸿沟背后的内部流程,是由过去促进公司生存和增长的相同机制引起的。该公司受制于过去的成功。就像诺基亚一样,这家全球最大的以硬件为中心的手机工厂,在苹果智能手机引领的软件革命中被彻底击败。
由于任何组织都有惰性,这些机制受到内在信念和价值观的影响,对适应市场和弥合经验鸿沟造成了阻碍。
首先,应该在管理层面解决鸿沟。因此,级别越低,离领导层越远,离客户越近,就越能感受和认识到鸿沟的存在。自然,一线员工将拥有从那些期望没有得到满足的客户那里得到最多的数据。
主要的体验鸿沟可能是由组织中七个层次(文化、反馈、执行、设计、价值、品牌承诺、情感联系)中的一个或几个盲点造成的。
在文化层面缺乏以顾客为中心的理念,员工无法使服务更接近客户期望,导致了“文化鸿沟”。在具有“文化鸿沟”的公司中,有助于以客户为中心的流程和活动都是处于低优先级的,相应的,它们也不会得到相关的资源。
缺乏关于客户期望和他们对产品或服务的体验数据会造成“反馈鸿沟”。在这种情况下,公司可能经常收集数据,但没有对其进行分析,也没有采取任何措施来改善这种情况。
即使优先考虑以客户为中心的方法,并且收集了大量有关客户期望的数据,但在设计能力和方法上仍可能存在鸿沟。拥有合适的专业知识,就可以构建高质量的数字产品生态系统,从而根据客户需求提供最佳服务。
这种鸿沟与糟糕的设计执行有关。如果不优先以用户为中心的来设计产品,那么创建最终产品和服务的决策和努力将注定是低质量和低效率的。这决定了公司在数字时代创造有竞争力的服务和产品的能力。
如果设计生态系统在 价值金字塔的五个层次(功能、可用性、美学、地位、使命)上不符合用户的期望,就会形成价值鸿沟。
正如我在上述银行案例中所表明的那样,如果一家公司只顾着积极推广其服务,承诺一些产品无法提供的东西,它会导致用户对期望的更大失望。因此,由于广告承诺与现实不符,对该服务的负面评价可能会翻倍。
如果品牌传播是纯粹的信息传播,专注于功能特征,那么就无法与用户形成情感联系。由于人类基于情感做出决策,因此基于情感构建服务价值会对客户期望和最终用户体验产生积极影响。
每个客户都会不知不觉地根据自己的期望来评估他们所接受的服务。用户体验质量所引发的情感将形成品牌的声誉。
在现代世界,数字渠道已成为品牌的主要“营销”和公关渠道。
一个应用程序,即使有一百年的服务客户历史和其他渠道的优质服务,负面体验也会破坏品牌推广的所有努力。
这仅仅是因为在数字时代,移动渠道占主导地位,对于某些人来说,它正在成为与品牌互动的唯一途径。这就是为什么了解如何弥合数字产品出现的七个体验鸿沟的方法如此重要。
在文化方面,转型基于高层心态的改变,并将这种影响渗透到整个的公司文化和内部价值观。特别是,可形成“以客户为中心”的体验思维模式。
在银行案例中,开始弥合反馈鸿沟的第一步,是深入了解社交媒体上的负面评论以及致电售后部门的电话。接近这些客户才容易消除反馈鸿沟。事实上,他们比管理层更了解应解决哪些问题,并且往往渴望积极分享自己的情绪并希望得到倾听。如果一家公司足够开放并准备好接受批评,它可以使用这些数据来弥合鸿沟并提高产品迭代的敏捷性。
通过整合设计方法和设计思维来制定弥合鸿沟的策略,可以使用设计金字塔。该框架从五个层次(流程、团队、行动、结果和价值)确定了能够提高公司整体效率的设计集成。
组织必须将经过验证的设计执行方法(例如设计思维、HCD 或 UX 设计方法)与分步系统相结合,以设计符合客户期望并能够弥合执行鸿沟的数字产品。
产品的功能级别为客户创造真正的价值和利益,并通过提供卓越的可用性进行功能扩展;美学 ——令人惊叹的视觉识别;状态 —— 针对产品特定受众的个性化,最后是建立产品的价值观与使命。
数字时代的客户要求透明、关怀、诚实和开放的沟通。由于网络效应,几乎不可能销售劣质产品,因为每个人都可以在社交媒体上发布负面反馈,而这些负面反馈将深深地损害客户的信任。因此,做出不仅可以兑现,甚至可以超额兑现的承诺至关重要。
对客户的同情和关怀比以往任何时候都更加重要。在品牌与客户之间建立情感联系对于确保长期忠诚度和需求至关重要。这种联系是通过之前涵盖的所有阶段建立的——将客户放在第一位的正确心态;收集反馈并在此基础上进行改进;使用正确的工具和方法来创建产品设计和生态系统;创造真正的价值和利益,最后,通过诚实和超额兑现承诺。
该途径涵盖了可能破坏数字产品创造的 7 个主要体验鸿沟,以及可以帮助避免和解决这些鸿沟的 7 个桥梁。如果一个品牌能意识到这些盲点,它可以立即获得比仍处于盲点的竞争对手的显著市场优势。
仅凭意识就可以产生巨大的差异,但将意识与行动相结合会导致长期成功,成为一个需求量很大和深受喜爱的品牌。
本文翻译已获得作者的正式授权(授权截图如下)

蓝蓝设计建立了UI设计分享群,每天会分享国内外的一些优秀设计,如果有兴趣的话,可以进入一起成长学习,请扫码ben_lanlan,报下信息,会请您入群。欢迎您加入噢~~希望得到建议咨询、商务合作,也请与我们联系。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
今日,有消息称字节跳动将会推出一款名为“飞乐”的音乐流媒体产品。字节跳动的入局,或将引起音乐行业的新波澜。本文作者对此发表了自己的观点,一起来看看吧。
擅长“四路出击”的字节跳动,又双叒叕出手了……
长期以来,关于字节跳动扩张的消息就一直不断。前有抖音内测“心动外卖”进军外卖领域,后有字节跳动收购VR公司的消息登上热搜……近日,有报道称字节跳动将于今年下半年推出一款音乐流媒体产品,产品的名称暂定为“飞乐”,项目内部代号为“luna”。而字节跳动的再次入局,或将引起音乐行业的新波澜。
今年4月,字节跳动成立了音乐事业部;7月份的时候,字节跳动将音乐升级为P1优先级业务,与游戏业务和教育业务平级;不久之后还内测了音乐代理发行平台“银河方舟”。除了自身做音乐之外,字节跳动还投资了校园音乐平台。这一系列动作无一不展现了字节跳动发力音乐领域的决心,而字节跳动之所以如此看重音乐业务也是有一定原因的。
首先,音乐业务有助于字节跳动获取新流量。据CNNIC发布的第47次《中国互联网络发展状况统计报告》显示,截至2020年12月,我国的网络音乐用户规模达6.58亿,与2020年3月相比增长了2311万,占网民整体的66.6%。其中,手机网络音乐用户规模达6.57亿,与2020年3月相比增长了2379万。随着短视频领域流量见顶,字节跳动亟需找寻到新的流量增长点。
其次,音乐行业用户的付费意愿在逐步增强。据前瞻产业研究院发布的相关报告显示,我国的网络音乐付费用户规模已经由2016年的2017万人,增长至2020年的7192万人,网络音乐付费渗透率也由2016年的4.0%增长至2020年的10.9%。网络音乐用户的月度消费金额也由2017年的8.5元,增长至2020年的9.5元。
以腾讯音乐为例,据其最新发布的二季度财报显示,截至2021年6月30日,腾讯音乐的在线音乐付费用户人数达到了6620万,同比增长了40.6%,与今年一季度相比净增长了530万人;付费率为10.6%,与去年同期和今年一季度的付费率相比均有所提升。
最后,音乐业务与字节跳动旗下的短视频业务相辅相成。配乐是制作短视频必不可少的环节之一,配乐和内容契合度极高的优质短视频往往能收获很高的播放量,但也正因短视频配乐使抖音多次陷入侵权局面,不少短视频也因其所使用的音乐无版权而被做下架处理。倘若字节跳动推出音乐产品,就能够为短视频用户提供更为方便的曲库支持,有利于短视频用户进行创作。
7月24日,国家市场监管总局责令腾讯音乐解除其网络音乐独家版权;8月31日,腾讯发布了《关于放弃音乐版权独家授权权利的声明》。众多音乐平台不再被音乐版权“卡脖子”,字节跳动于此时再度发力数字音乐,自然也能享受到行业大环境变化所带来的重大利好。除此之外,还有其他原因也会对字节跳动发展音乐业务产生积极影响。
其一,是其拥有庞大的流量优势。据抖音发布的《2020抖音数据报告》显示,截止2020年12月,抖音的日均视频搜索次数突破4亿;截止2020年8月,抖音的日活跃用户数量突破6亿。有抖音这一巨大流量池为其引流,无论是音乐流媒体产品的用户获取,还是音乐作品宣发都会容易一些。
9月9日,工信部相关业务部门召开了“屏蔽网址链接问题行政指导会”,提出有关即时通信软件的合规标准,要求9月17日前各平台按标准解除屏蔽。随着屏蔽外链的解除,字节跳动也将从中获益,迎来新一波流量增长。
其二,是创作者扶持计划成效显现。早在2018年,抖音就启动了“看见音乐计划”以扶持原创音乐,随着不断进行的音乐扶持计划,抖音的音乐生态也在逐渐完善。据《2020抖音音乐生态数据报告》显示,2020上半年抖音的音乐人入驻数量增长近3万;近半年抖音音乐人涨粉累计超3亿,其中涨粉超1000万的音乐人有6位,涨粉超500万的音乐人有23位。
而抖音扶持音乐计划的成功,也给字节跳动的音乐流媒体产品打了样。字节跳动在发展音乐业务时,也可以采用类似的策略进行音乐产品内容生态的完善。另外,部分抖音音乐人也可能成为字节跳动音乐业务的潜在音乐人,为字节跳动音乐业务的发展添砖加瓦。
其三,算法优势助力音乐业务发展。众所周知,算法是字节跳动的一大特色,今日头条和抖音能取得当前的成绩,与字节跳动的算法推荐不无关系。据悉,字节跳动的音乐业务主要由前台和市场、算法两大中台支持构成。在中台方面,由抖音的市场团队承担国内音乐人合作与版权宣发,算法团队负责提供智能配乐、安全风控等技术支持。
无论是后版权时代的来临,还是字节跳动自身的优势都对其发展音乐业务大有裨益,但机遇与挑战并存,字节跳动在迎来重大利好的同时,依然面临着不小的挑战。
一方面,腾讯音乐的霸主地位难以动摇。在“取消网络音乐独家版权”尚未落地之前,腾讯音乐凭借海量的正版歌曲曲库以及持续建设的内容生态,稳居行业头部。据腾讯音乐发布的财报显示,今年二季度腾讯音乐的在线音乐月活跃用户数为6.23亿,仅月活跃用户数这一项指标,字节跳动在短时期内就很难与之相匹敌。
另一方面,网易云音乐的音乐社区文化别具一格。在被音乐版权“卡脖子”的时期,网易云音乐凭借其音乐社区文化,成功地从众多音乐平台中脱颖而出,浓郁的社区氛围也极大地提高了用户的黏性。另外,网易云音乐不断推出的扶持计划也增强了其内容竞争力。
网易云音乐的这些特色化优势,也将为其在今后的发展中提供助力,但对字节跳动来说,拥有这些差异化优势的网易云音乐,无疑是一位强劲的对手。
另外,快手也在音乐领域有所布局。早在2018年的时候,快手就推出了一款音乐产品“光音Mulight”;今年2月26日,快手推出了音乐K歌APP“回森”;5月份的时候,快手推出了音乐APP“小森唱”,该软件的核心功能是AI创作词曲用户进行演唱,在演唱之后还可以通过点赞评论等方式进行互动,最终达到社交的目的。随着快手在音乐领域的不断加码,也会对字节跳动音乐流媒体产品的发展产生影响。
目前来看,随着行业大环境的变化,在线音乐领域的竞争愈发激烈已经是无可辩驳的事实。无论是稳居头部的腾讯音乐,还是擅长打情怀牌的网易云音乐,亦或是跨界而来的快手,都是字节跳动音乐流媒体产品的强劲对手。而字节跳动能否在强手如云的音乐行业闯出一片天,仍待时间验证。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
做好行业研究,有助于企业或个体从业人员更好地洞察市场,进一步发现机会,或者找准产品定位,推动企业战略决策和后续实施。本篇文章里,作者就行业研究的分析框架与思考维度做了总结和梳理,一起来看一下。
以始为终,构建行业研究的方法论和分析框架,需要从目的出发,下面列举几类典型的行业研究报告目的。
券商的报告(二级市场),分析某个行业是否有投资价值,从行业赛道的选择过渡到这个行业赛道中的值得被投资的公司,说明这个行业中哪些公司更有投资价值。报告结果是要用于股票投资服务的。二级市场由于公司财务报告的披露性质,公司的财报分析在行业报告中也是重要的构成部分。
互联网战略投资部门/VC的报告(一级市场),互联网战略投资部门通常以公司的战略发展目标为出发点,布局上/下游产业链,或通过收购竞品公司,巩固和发展公司在行业的竞争力,提升市场占有率,开拓新的市场;VC通过布局细分的赛道,选择合适的投资标的,参与风险投资。
值得注意的是在互联网初创企业的财报分析通常不作为重要参考因素,多数互联网公司在初创期将投入大量资金,长期处于亏损状态,此时,市场份额和估值与传统二级市场的分析方式有较大差异。
咨询公司的报告,目的是为行业内的公司服务的,说明该行业的行业规律、行业风险、行业机会、行业发展趋势等。在行业研究的内容方面,咨询公司常见的模式还包括访谈调研行业内公司高管。
基于行业研究的目的,常规的行业研究框架,包括一下几个核心部分:宏观分析、行业分析、公司分析、消费者分析、竞争者分析,其中宏观分析和行业分析的视角都是从赛道链路的角度,进行整体分析,而公司、消费者和竞争者则是从市场参与者的角度进行分析。
1)宏观分析思考的维度
2)宏观分析考虑的内容:
宏观分析中考虑的因素点对行业环境的影响,因素点可采用PEST模型分类,但不必拘泥于PEST模型,因素点间可能是组成多因素,从而对行业环境产生间接或直接影响。基于PEST模型,因素点可以分为:
① 经济类
包括经济发展水平、社会经济结构和宏观经济政策,其中经济发展水平可以通过较为典型的量化指标进行衡量,例如GDP\CPI\进出口规模等;宏观经济政策主要包括货币政策和财政政策;社会经济结构主要体现在经济体制和产业结构构成。
② 政治类
包括政治体制、政局稳定性、和相关的政治政策。
其中政治体制包括资本主义、社会主义和中国特色社会主义等,政治体制对行业的影响为间接影响;政策包括投资政策、环保政策、进出口政策、货币政策和财政政策等,也有针对具体行业的政策,例如近期发布的教育“双减”政策就对在线教育行业产生了不小冲击,网络安全隐私数据保护政策对互联网公司获取用户使用偏好数据,产生了非常大的影响。
其次,除了政治政策,政局的稳定性对行业发展稳定产生重要影响。
③ 文化环境类
包括人口因素、社会流动性和消费心理,此类因素可与消费者分析关联,对消费者细分市场和市场定位产生了重要的影响,主要从聚类的角度,对消费群进行分析。
人口因素主要考虑人口总数、年龄构成、性别比例、教育水平、人口地理分布等,社会流动性主要考虑社会阶级流动性和贫富差距;消费心理主要包括生活方式、文化传统和价值观等,对消费者偏好心理产生影响,从而影响消费者的行为决策。
④ 科技类
主要包括专利技术数量和质量、相关产业技术等,科技对一个产业的生产效率与产品更新,甚至一个产业的萌芽和灭亡都将产生巨大的影响,例如智能芯片对手机行业产生了巨大的冲击,原有的非智能手机迅速被智能手机取代,生产非智能手机的厂商迅速破产。
综上,宏观类因素多数为混合因子对产业产生直接或者间接的影响。
1)产业分析思考的维度
① 整体市场分析
整体市场分析除了关注静态的存量市场,也需要关注动态的增量市场。市场的现有市场规模和增速决定了市场的规模,体现为市场的“宽”度和市场的“长”度,行业壁垒和驱动因素影响参与市场的玩家数量,体现为市场的“陡”度。
② 市场参与者
市场参与者从各个角度,在产业分析上有不同的分析时间,例如从产业链角度,分析上下游供应商和购买者、从行业参与者的角度,分析竞争者和行业集中程度。
③ 影响因素
产业影响因素和宏观影响因素的区别在于,产业影响因素从供给需求、驱动和壁垒的角度分析更为直接的影响因素对产业产生的影响。
2)宏观分析考虑的内容
① 产业规模
产业规模可以从空间维度进行解析,产业的宽度代表现有市场规模,产业的长度以时间为维度,代表增长率和增长率增速,而产业规模=现有市场规模*增速。
由此可见产业规模的衡量有两个重要的衡量标准和指标,即市场规模与复合年均增长率(CAGR),市场有多宽指行业规模有多大、增长的天花板有多高,是衡量一个行业现有市场容量和将来市场发展空间的最重要的标准,现有市场容量决定了该市场有多少蛋糕可以分,而市场增速决定了行业发展潜力,行业增速可与行业的成熟度曲线紧密联系。
② 产业生命周期
产业的生命周期以时间为维度,一般分为导入期、成长期、成熟期和衰退期。产业生命周期在导入期、成长期、成熟期和衰退期的不同阶段,可以从经营风险、财务风险、产品差异、单位利润、产品特征等不同维度进行分析,详见下图。
③ 产业链
产业链分为上游供应商、下游购买者、潜在进入者和现在竞争者,将企业放在产业链进行分析,需要对供应商和购买者有较高的议价权,能有效面对竞争者。
其中,影响供应商议价能力的影响因素包括市场占有率、转换成本和供应商战略,影响购买者议价能力的影响因素包括价格敏感度,相对议价能力等,影响潜在进入者的障碍有结构性障碍和行为障碍,影响替代品威胁的主要因素包括产品同质化程度和劳动生产效率等。
④ 产业驱动因素与行业壁垒
产业的驱动因素主要分为两个部分,第一是生产要素驱动,第二是相关支持性产业驱动,其中,生产要素包括高级生产要素和初级生产要素,而相关支持性产业,则表现为产业链上下游的聚集驱动。
行业壁垒:行业壁垒分为限制性要素和市场壁垒,可以通俗理解为一只“看得见”的手和“看不见”的手,即政策限制和市场限制。
政策限制如进出口限制、许可证、配额等,实现限制如规模效益使得成本降低,对新进入的小规模玩家形成行业壁垒,又比如缺乏品牌技术,而只能成为代加工企业,获取最低的生产制造利润等。
如果行业的门槛很高,竞争者难以进入市场,行业的垄断程度也相应比较高,通常用行业集中度来分析衡量,即CR5(行业中前5名的企业占据的市场份额)。
但是,垄断程度越高,企业越有机会获得超额利润,但行业的垄断程度并非仅仅由行业壁垒所决定,消费者的需求差异也会对垄断程度产生重要影响,例如手机行业的垄断程度较高,而餐饮行业却很难出现寡头垄断,因为餐饮的消费者偏好差异非常大。
⑤ 供求分析
供给侧主要包括产能分析,同时也受行业集中程度的影响,即上文所述的行业垄断程度,产能分析包括产能利用率水平、库存周期、产品使用寿命、订单周期,这里比较典型的行业是电子产品生产制造业。
需求侧主要从消费者市场出发进行分析,同时考虑替代品,需求预测包括消费者整体购买力和细分需求市场,这里的消费者整体购买力受到宏观因素的影响,例如人均可支配收入、贫富差距等;替代品的细分影响因素包括国家进出口和国内市场替代品。
⑥ 产业结构
产品结构:产品结构可以从加工阶段和主导构成不同的视角进行分析,加工阶段主要以产业链维度为分析视角,从初级产品、中间产品和最终产品进行分析,主导构成主要从驱动因素进行分析,分为劳动密集型产品、资金密集型产品和技术密集型产品等。
市场结构:市场结构从分类上可以分为市场主体结构、市场客体结构、市场空间结构和市场 时间结构,从行业集中程度,可以分为完全竞争市场、完全垄断市场、垄断竞争市场和寡头垄断市场等,影响行业集中程度的因素在前文已经提及。
1)公司思考的维度
① 战略
战略需要将企业放置在宏观和产业的角度,通过对赛道、竞争者和消费者的分析,制定战略,从整体分配资源,规划产品和服务。
② 经营分析
经营分析从数据量化的指标,动态指导经营过程中的业务发展。运用定量分析、业务分析和行为分析相结合的方法,对企业进行综合分析的一种现代经营分析体系。包括:经营基础分析、财务分析、市场分析、劳务分析、生产分析、物资分析等。从业务单元的视角优化运营。
2)公司分析考虑的内容
① 战略分析
战略分析包括企业能力与资源分析、价值链分析、产品组合分析、外部分析、内部分析、财务指标分析和商业模式分析等。
② 战略选择
战略选择可以从总体战略和智能单元战略出发,如果业务涉及海外业务,需要分析选择国际化经营战略。
3)竞争者思考的维度
4)竞争者分析考虑的内容
1)消费者思考的维度
细分市场与精准营销:在互联网数字化的革新下,原有的消费者聚类分析越来越精细化,不仅有群体的聚类标签,个体消费者的标签也能层层穿透,为精准营销运营提供了条件。
2)消费者分析考虑的内容
基本属性:基本属性包括年龄、收入、性别、受教育程度和地域分布等。
购买动机和购买行为:根据MBA智库的定义,营销学家把消费者的购买动机和购买行为概括为6W和6O,从而形成消费者购买行为研究的基本框架。
① 市场需要什么(What)——有关产品(Objects)是什么。通过分析消费者希望购买什么,为什么需要这种商品而不是需要那种商品,研究企业应如何提供适销对路的产品去满足消费者的需求。
② 为何购买(Why)——购买目的(Objectives)是什么。通过分析购买动机的形成(生理的、自然的、经济的、社会的、心理因素的共同作用),了解消费者的购买目的,采取相应的市场策略。
③ 购买者是谁(Who)——购买组织(Organizations)是什么。分析购买者是个人、家庭还是集团,购买的产品供谁使用,谁是购买的决策者、执行者、影响者。根据分析,组合相应的产品、渠道、定价和促销。
④ 如何购买(How)——购买组织的作业行为(Operations)是什么。分析购买者对购买方式的不同要求,有针对性地提供不同的营销服务。在消费者市场,分析不同的类型消费者的特点,如经济型购买者对性能和廉价的追求,冲动性者对情趣和外观的喜好,手头拮据的购买者要求分期付款,工作繁忙的购买者重视购买方便和送货上门等。
⑤ 何时购买(When)——购买时机(Occasions)是什么。分析购买者对特定产品的购买时间的要求,把握时机,适时推出产品,如分析自然季节和传统节假日对市场购买的影响程度等。
⑥ 何处购买(Where)——购买场合(Outlets)是什么。分析购买者对不同产品的购买地点的要求,如快速消费品,顾客一般要求就近购买,而选购品则要求在商业区购买,一边挑选对比,特殊品往往会要求直接到企业或专卖店购买等。
综上所述,行业研究的框架可从宏观、赛道、市场参与者进行分析。

分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
登录是进入一个应用程序 、网站或服务的入口。帮助用户建立他们的账户。
让我们花点时间来定义一下“登录目标”这个术语,这是在做设计决策时的关键。
登录目标是指用户进入登录流程的意愿。以有声思维来表达,它可以是 “我想登录”、“我想检查我的电子邮件”、“带我去那里”,等等。
当用户进入到登录页时,他们可能没有登录意愿。可能会产生“嗯,我不在乎,以后再做”或“这太麻烦了”或“呀,我现在该怎么办?”的想法。忘记密码、半路遇到困难或切换到另一个页面/设备,都可能是缺乏登陆意愿的迹象。
我们得到了登陆目标
保留或增强登录流程中的登陆意愿是很好的目标,下面的准则都是为这个目标量身定做的。
设计熟悉的体验,虽说不是设计师最喜欢的设计准则,但是与整个生态系统中最好的体验保持一致是非常重要的。例如使用简单、公认的布局,使用众所周知的术语和文案,都有助于用户自信而轻松地进行熟悉的操作。
保持通用的设计也有助于将页面轻松扩展到不同的形式和设备。
Pinterest 有一个传统的、居中的覆盖式登录页。它有一个亮红色的主要登录按钮,并提供 Google 和 Facebook 作为额外的社交登录选项。
滑到最后,有我对网络上流行的成功登录经验的总结。这就把我们带到了下一个问题 —— 创新的界限在哪里?
登录是一个品牌展示的绝佳机会点。在视觉上,它可能使用品牌色、品牌照片、品牌插图,甚至是营销信息。和大多数设计问题一样,登录页品牌展示的关键在于平衡。登录操作应该一直占据中心位置。页面上的其他元素必须谨慎规划好,不应该夺走登陆操作的注意力。
一条优秀的经验之谈:用户在登录页面上花费的时间越少越好。帮助他们继续前进,尽快发现产品中的优点和价值。
快速回顾一下:用户在登录页面上花费的时间越少越好。根据这一点,登录(或恢复)操作应当占据用户的全部注意力。
在恢复体验中,将一套复杂的操作分解成多个步骤是很有效的。安排用户一次只做一件重要的事情!例如:输入你的手机号码和输入发送到你手机上的验证码是两个独立的步骤。
Facebook 在页面中保持用户信息在右侧,并将恢复流程分解为多个步骤。
亚马逊把它的恢复流程分解成多个步骤。它将次要的恢复选项设置为 “我需要更多帮助 ”的可扩展部分,这有助于保持注意力集中在主要操作。
保持注意力集中在主要操作的技巧:
在登录过程的每个阶段,用户都可能失败。电子邮件地址输入错误、密码输入错误或忘记密码、网络问题,所有这些都可能导致登录意愿的急剧下降。因此,登录界面以最恰当的方式回应用户是非常重要的。清晰、及时、精心编辑的错误提示信息能起到很大帮助。
错误信息包含有用的提示/暗示,指明你在失败时可以做什么
当你密码登陆失败,但你有一个 Gmail ID 时,Facebook 会增加一个 “用 Google 账号登录 ”的功能
指导用户恢复的技巧:
重点是让用户知道平台识别出了他们,并提供一个欢迎回归的体验。这有助于提升用户的登录意愿。
保留登录痕迹的方法:
对于你的平台应该提供哪些登录方法,没有一个放之四海而皆准的方案。最好是提供一到两种额外的方法(除了用户名+密码),这样用户就有了选择,以防他们忘记密码。这些方法可以是基于电话号码的登录、人脸识别,或最常见的社交登录,如 Google、Twitter、LinkedIn 或 Facebook。如果你正在考虑社交登录,思考为平台添加最流行和最安全的方案。
需要注意的是 —— 增加很多的登陆方法会使页面变得混乱,可能会导致登录意愿降低!将额外的选项限制在 2 或 3 种。
针对最常用的登陆方式进行优化,并明确区分主要和次要方式。这些选项通常被证明是需要重置密码(以防用户忘记密码)的很好的替代方法,但同时也被认为是一个乏味的步骤。情况允许时,应智能地浮现其他登陆选项并进行个性化处理。例如:如果用户是通过电子邮件登录,提供一个带有一次性链接的登录选项可能会有效。
在此提供 Medium 登录页的案例。虽然清晰且设计良好,但它确实有太多的登录方法。不得不回访 Medium 的设计者,如果这个设计对他们来说是好的!
无密码登录正火速流行起来。特别对于只有移动端的应用程序来说,基于电话号码的认证已常态化。指纹和 FaceID 在许多地方出现,使认证流程变得快速、安全。为平台找到最适合(且可开发)的方法,并将其作为主要登录选项。
登录涉及到用户输入敏感的个人数据,如电子邮件、密码和电话号码 —— 这是决定了他们与平台关系的敏感时刻。
登录框代表了品牌,任何视觉上的改变都必须缓慢进行——因为整体的视觉变化可能会失去用户信任。
登录也是(有用的)保障 —— 足以让坏人无法进入系统!
虽然减少普通用户的操作是很重要的,但如果我们怀疑用户可能是黑客,那么出现额外的认证也变得很重要。这可能是一个很好的机会去提醒用户能够采取哪些措施来加强他们账户的安全性 —— 例如:强密码、双重认证等。
之前有提到过,投入足够的时间去调研用户,有助于提高登录意愿!这一点是很重要的。
登录是一种体验,你的用户角色可以是各种各样的 —— 每个人都可能拥有一个你平台的服务账户!如果可能的话,缩小你的角色范围。
情况允许时,像我这样(为社交媒体平台设计),可以尝试以下方案:
以下是我对网络上我最喜欢的登录页进行的总结,包含一些我经常访问的平台。欢迎推荐更多登录页!
Google(谷歌)打破了标识优先的格式 —— 改成了分步式登录模式,在不同的步骤中输入电子邮件和密码。这种模式对于 Google 有安全优势,也可以使他们在接下来的步骤中为用户提供个性化的选择。页面也是最小的、全白的、聚焦的。
Uber 的登录页是简单且聚焦的,允许用户输入他们的电话号码并进入下一步。
Facebook 有几个登录方案,他们用这些方案进行实验和 A/B 测试 —— 这是一个右对齐的登录框案例,它很好地突出了重点。左侧的空间被用来打造积极的品牌形象 —— 总体来说是成功的登录体验。
Pinterest 做了 一个简单居中的叠加表单,有硕大的输入框 —— 不断吸引用户!还有一个亮红色的登录主按钮,以及一些额外的社交登录选项。
尽管 Airbnb(爱彼迎)在很多方面都做得很好,但它的登录页让人感到操作繁多,这也许是因为基于手机号码登录,也许是因为大量的次要登录选项,导致相当多的认知负荷!
LinkedIn(领英)很好地保持登录框的简介、聚焦和居中,有一个醒目的主登录按钮。
我对 Dropbox 的登录页面持犹豫态度——插图很好看,但它的颜色与界面按钮的颜色相似。这是附加元素分散注意力的案例。就我个人而言,我喜欢在界面中大胆使用插图,但评估插图的使用环境也很重要。
Amazon(亚马逊)的登陆页视觉设计上有些老旧,但对于管理用户注意力是一个很好的案例,巨大的黄色“继续”按钮以及页面上没有任何干扰,使登录任务看起来简单快速。
在登录页面上放置广告可能不是一个好主意,但同时 Yahoo(雅虎)有一个与众不同的标识在登录框中,其中设计了一些巧妙的功能,帮助用户减少输入。(参考下图)
我想把 Figma 纳入优秀的登录案例中,该页居中于浮层,Google 登录被突出展示(也许是 Figma 的首选和推广的登录形式?),它非常简洁,几乎是线框式的。用户体验非常好。
感谢我的产品合作伙伴 Apurva 和我一起学习。采取微小的步骤进行用户识别,并且使用户易于接受。这会使你的用户登录成功率越来越高!同时这也会为平台带来更多的活跃用户。:)希望你能从这篇文章中得到启发,并应用于你自己的产品和设计工作中。
分享此文一切功德,皆悉回向给文章原作者及众读者.
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
本节课程教大家如何讲智能合约部署到conflux公链上,首先大家可以看到下面的这个智能合约是不是很简单。我们将会以这个合约演示部署到conflux公链的过程。
pragma solidity ^0.5.0;
contract Counter {
uint public count=0;
event SelfEvent(address indexed sender, uint current);
constructor() public {
} function inc(uint num) public returns (uint){ return count += num;
} function self() public {
emit SelfEvent(msg.sender, count);
}
} 复制代码
我们使用js-conflux-sdk作为本教程的web教程,交互首先我们需要进行安装nodejs作为我们的运行环境。飞机票一张收下吧,我们安装好nodejs后,就可以来玩我们的sdk了。废话不多说,直接开始撸。
我们使用WIN + R键打开命令行,然后创建一个文件夹(温馨提示切换到非系统盘玩切换方式“D:”就切换到D盘了)使用“mkdir my-project && cd my-project” 创建好项目后自动进入文件夹,然后我们运行“npm init” 进行初始化node项目,这一步会让你确认一些东西,如果你是小白一路回车(Enter键)就好。如果你是前端大神,我也没啥好教的我也不太懂。为了稳定我们使用固定版本号方式安装依赖,我们运行 “npm install js-conflux-sdk@0.9.2” 命令进行安装js-conflux-sdk的0.9.2版本依赖(可以使用“npm uninstall package-name” 命令删除对应依赖)。前置准备到这里基本已经完成。
下面请看我的目录结构跟随我一起来学习,下面的目录结构请不要直接看到了就创建,因为你不知道都是什么意思,看玩我的解释在回头创建。
小伙伴应该已经发现了 node_modules、package-lock.json、package.json 这些文件是我们在进行安装 sdk依赖时自动生成的。其他文件目前都没有,我们来按顺序生成他们。
先创建sol这个文件夹,然后创建这三个文件。test.sol就是上面我们的合约代码直接拷入文件中。abi.json和code.json两个文件是通过这个工具 remix 在线生成的。我来说下生成过程。 首先我们将里面的文件全部删除,然后点击这里找到我们的项目目录下的test.sol 文件
我们应该看到下方我框出来的两个按钮了吧,那两个按钮就是abi.json和code.json文件的来源。abi.json我们可以直接复制过去,code.json文件我们要改点东西。
首先我们看到的code文件应该是这样的
{ "linkReferences": {}, "object": "608060405260...c63430005110032", "opcodes": "PUSH1 0x80 PUSH1 ... 1100 ORIGIN ", "sourceMap": "27:337:0 ... 37;;;;;;" } 复制代码
代码有省略,太长不好看,我们看到object这个key值了吧,我们把它的值考出来然后在头部加0x 就好了放在code.json文件中。code.js文件中只存放object的内容前面加0x,也就是下面的代码,其他信息都不要,千万记住了。这点很重要!!!!
"0x608060405260...c63430005110032" 复制代码
就是这样的。然后我们在写另外两个call和deploy两个文件
先写deploy文件
// 私钥地址
const PRIVATE_KEY = '0x20f9169d40801955faada641cdb029f8e42c581c0c991a62753c736a0a168e5e';
// 合约地址
const CONTRACT = '';
const { Conflux } = require('js-conflux-sdk');
async function main() {
const cfx = new Conflux({
url: 'http://mainnet-jsonrpc.conflux-chain.org:12537',
defaultGasPrice: 100,
defaultGas: 1000000,
});
const account = cfx.Account(PRIVATE_KEY); // create account instance
console.log(account.address);
// create contract instance
const contract = cfx.Contract({
abi: require('./sol/RC20.abi.json'),
bytecode: require('./sol/RC20.code.json'),
});
const receipt = await contract.constructor()
.sendTransaction({ from: account })
.confirmed();
console.log(receipt.contractCreated);
}
main().catch(e => console.error(e)); 复制代码
打开项目cmd窗口在上面的目录下 运行命令 “node deploy.js”就将合约部署上去了
receipt.contractCreated 这个会打印出合约地址。
作者:悠悠_15832013094
链接:https://juejin.im/post/5ef563f75188252e99702335
来源:掘金
分享此文一切功德,皆悉回向给文章原作者及众读者.
转自:csdn
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
对本教程有任何疑问或建议可以在 GitHub 给我们留言。
Conflux DApp 开发教程将使用 Conflux Studio 在 Oceanus 网络下开发一个简单的代币应用 Coin。
通过这个开发教程,你将会学习到如何进行 Conflux 智能合约的编写、调用,配置智能合约的代付以及如何使用 Web 前端项目与智能合约进行交互,从而实现一个包含前端和智能合约的完整的 DApp。
在阅读教程中遇到任何问题,欢迎在 Issues 中向我们反馈。
请在 GitHub 下载页面下载 Conflux Studio。目前 Conflux Studio 支持 macOS 和 Linux 系统,请根据系统下载对应的版本。
正确安装 Conflux Studio 并初次启动后,Conflux Studio 将显示欢迎页面,根据提示完成 Docker, Conflux Node 以及 Conflux Truffle 的下载、安装及启动。
完成所有的安装步骤后,首先需要创建钥匙对来完成后续的合约部署以及调用。
在 Conflux Studio 的任意界面,点击应用左下⻆的钥匙图标,打开密钥管理器。点击 Create 按钮打开新钥匙对弹窗,输入钥匙对的名字并点击 Save 按钮。完成后将在密钥管理器中看到刚刚生成的钥匙对的地址。钥匙对由私钥和公钥组成,公钥在智能合约中也常被称作地址。
导出私钥可以通过点击每个地址后面的眼睛按钮打开查看私钥弹窗,弹窗显示地址以及私钥。后续教程中会需要通过管理器导出私钥。
为了顺利完成教程,首先需要创建三个钥匙对:
minter_key 用于 Coin 合约部署时的签名,是这个教程中最常使用的钥匙对
receiver_key 用于 Coin 合约接收转账,将在后文中介绍转账时用到
sponsor_key 用于 Coin 合约代付功能,将在后文中介绍代付功能时用到
教程将在 Oceanus 网络进行合约的部署以及合约的调用。点击顶部 Network 标签的倒三角打开下拉菜单,点击选择 Oceanus 网络进行切换。
切换完成后,可以在主页面中看到当前网络为 oceanus。页面左边包括了当前网络的节点 URL,Chain ID,TPS 信息,页面右边包含了当前网络区块的信息。
点击顶部 Explorer 标签打开区块浏览器,并在地址栏粘贴钥匙对地址,可以在左边看到当前地址的 CFX 余额信息。
在区块链的世界中,大家通常将申请测试 Token 的方式称为 faucet,目前在 Oceanus 网络下每次 faucet 申请到的 Token 为 100 CFX。
获取 CFX 的方式有两种方式:
https://wallet.confluxscan.io/faucet/dev/ask?address={address} 来申请 CFX
使用上述方法在 Conflux Studio 中为 minter_key 和 sponsor_key 申请 CFX Token。完成申请后,这两个账户上的余额将会从 0 CFX 更新为 100 CFX。
目前余额信息为:
minter_key 余额 100 CFX
receiver_key 余额 0 CFX
sponsor_key 余额 100 CFX
点击顶部左边的 Project 标签切换至项目列表页面,点击页面中的 New 按钮打开项目创建窗口,输入项目的名称并选择 coin 模版,点击 Create Project 完成项目的创建。
Coin 合约是一个简单的代币合约,其中:
Conflux 智能合约使用 Solidity 语言进行开发,打开目录下的 contracts/Coin.sol 文件,这个是本项目的核心代码:
// 指定了 Solidity 的版本,通过 Pragmas(https://solidity.readthedocs.io/en/latest/layout-of-source-files.html#pragmas) 告诉编译器本代码可以兼容的版本为 0.5.0 到 0.7.0
pragma solidity >=0.5.0 <0.7.0;
// 导入 SponsorWhitelistControl 合约
import "./SponsorWhitelistControl.sol";
// 定义 Coin 的合约
contract Coin {
// 定义了两个 State Variables(https://solidity.readthedocs.io/en/latest/structure-of-a-contract.html#state-variables)
address public minter;
mapping (address => uint) private balances;
// 使用 SponsorWhitelistControl 合约连接系统合约
SponsorWhitelistControl constant private SPONSOR = SponsorWhitelistControl(address(0x0888000000000000000000000000000000000001));
// 定义了 `Sent` 的事件,定义了 from / to / amount 列
event Sent(address from, address to, uint amount);
// Coin 合约的 constructor ,在 constructor 中指定了 minter 的地址
constructor() public {
// msg.sender 为部署合约时签名的账户地址,将这个地址赋值给 minter
minter = msg.sender;
}
// 定义 mint 方法,通过此方法来增发代币
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
require(amount < 1e60);
balances[receiver] += amount;
}
// 定义 send 方法,通过此方法可以给别的账户转账代币
function send(address receiver, uint amount) public {
require(amount <= balances[msg.sender], "Insufficient balance.");
balances[msg.sender] -= amount;
balances[receiver] += amount;
// 通过 emit 触发 Sent 事件,记录这笔转账的信息
emit Sent(msg.sender, receiver, amount);
}
// 定义 balanceOf 方法,这是个 view 类型的方法,用于查询账户余额
function balanceOf(address tokenOwner) public view returns(uint balance){
return balances[tokenOwner];
}
// 定义了 add_privilege 方法,调用系统合约 add_privilege 方法添加地址到代付白名单
function add_privilege(address account) public payable {
address[] memory a = new address[](1);
a[0] = account;
SPONSOR.add_privilege(a);
}
// 定义了 remove_privilege 方法,调用系统合约 remove_privilege 从合约代付白名单中移除地址
function remove_privilege(address account) public payable {
address[] memory a = new address[](1);
a[0] = account;
SPONSOR.remove_privilege(a);
}
}
点击工具栏的 Build 按钮进行合约的编译,编译的结果将会保存在 build/Coin.json 文件中。

在部署合约前,首先需要确认在 Explorer 中选择合约部署所使用的地址,Conflux Studio 会使用这个地址将部署合约这笔交易进行签名(选择的方法为在 Explorer 的地址栏中输入地址)。在合约代码的 constructor 中,minter 被赋值为 msg.sender,这个 msg.sender 就是 Explorer 所选择的地址。
在此我们选择 minter_key 作为部署合约的签名者。

点击工具栏的部署按钮进行部署,部署完成后,部署结果会在 deploys 的 JSON 文件中,在这个文件中可以在 contractCreated 中找到当前合约部署的地址,后文中使用 contract_addr 来代表这个合约地址。
点击顶部的 Contract 标签切换至合约页面,在地址栏输入 contract_addr 地址并加载合约。
合约页面由三个部分组成:
点击合约调用的下拉菜单中选择 mint 方法,在下方的参数区域分别填入以下信息:
minter_key 地址
msg.sender 获取到这个地址。填入 minter_key 地址
填写完成后点击执行按钮,Conflux Studio 将自动构造交易并推送到网络中。成功执行后可以在下方 Result 中看到这笔成功的交易。
点击查询区域的下拉菜单并且选择 balanceOf 方法,这是在代码中定义的查询方法。在下方的 tokenOwner 填入 minter_key 地址并点击执行,就可以在下方的 Result 中看到 minter_key 账户的 Coin 代币的余额信息为 1000。使用同样方法可以查询到 receiver_key 账户的代币余额为 0。
在合约调用区域选择 send 方法,在 Parameters 中分别填入:
receiver_key 地址
minter_key 地址,
点击执行完成转账,再次查询代币余额可以看到 minter_key 账户只剩下 800 代币,而 receiver_key 账户则从 0 变成了 200 代币。
Conflux 智能合约的每个调用的方法都可以带上 Value 参数,这是一个可选的参数。如果带上了这个值,智能合约出了在执行这个方法的逻辑外,还会额外转 Value 中指定数量的 CFX token 到 receiver 账户,转账金额为 Value 中所填的值。有些智能合约的方法需要这个参数才可以完成调用,但是在 Coin 合约不需要这个参数。
后文中的代付功能将会使用到 Value 参数。
在事件区域选择 Sent 并点击执行,下方的 Event Logs 可以看到转账的记录。Sent 事件的列都是由代码中的 Sent 事件的参数来定义的(其中 epoch 为事件发生的时间,这个为系统默认列)。在代码中定义了 Sent 方法的参数为 from, to 和 amount,分别对应了这笔转账的发起者地址,接受者地址以及转账的数量。
Conflux Studio 支持 Conflux 系统合约提供的代付功能。
通过系统合约可以为别的合约设置代付功能,系统合约提供给了四个方法:
add_privilege 添加合约代付白名单,在代付白名单中的地址调用该合约的方法时不需要付手续费,费用由代付账户支付。其中添加特殊地址 0x0000000000000000000000000000000000000000 代表为所有调用该合约的地址代付费用
remove_privilege 移除合约代付白名单
set_sponsor_for_collateral 设置合约储存费 (collateral for storage) 的代付账户及代付金额
set_sponsor_for_gas 设置合约手续费 (gas fee) 的代付账户、代付金额及每笔交易代付金额上限
启用一个合约的代付需要设置代付的账户、代付金额的及代付白名单。教程将会使用 Conflux Studio 通过系统合约设置代付账户及代付金额,通过 Coin 合约添加代付白名单。设置完成后,minter_key 账户调用 Coin 合约的方法时将不会被扣除手续费,手续费由 sponsor_key 账户代付。
在 Conflux Studio 中访问系统合约地址 0x0888000000000000000000000000000000000001,在合约调用区域能看到前文中提及的四个设置代付的方法。
选择 set_sponsor_for_collateral 方法,该方法有三个参数:
contract_addr
sponsor_key 地址
sponsor_key 账户将会被扣除 40 CFX。
选择 set_sponsor_for_gas 方法,该方法有四个参数:
contract_addr
sponsor_key 地址
sponsor_key 账户将会再次被扣除 40 CFX。
完成这两个方法的调用后 Coin 合约代付账户便设置好了,sponsor_key 账户将为 Coin 合约的手续费和储存费各提供为 40 CFX Token 的代付服务。由于目前代付白名单中并没有账户地址,因此还需要添加白名单地址才能完成代付设置。
在 Coin 合约中集成了设置代付白名单的方法,通过调用此方法可以添加或删除代付白名单。
在 Conflux Studio 中访问 contract_addr 合约,选择 add_privilege 方法:
minter_key 地址
minter_key 地址
运行后就成功设置了代付白名单了,至此 Coin 合约的代付功能设置好了。
在进行代付测试前,先查询并记录下 minter_key 账户的 CFX 余额。例如本教程中,minter_key 的初始余额为 97.6210937497093952 CFX。
回到 Coin 合约调用页面,再次调用 mint 方法并使用 minter_key 地址增发代币 1000,完成代币增发后再次查询 minter_key 的余额,仍然为 97.6210937497093952 CFX。
可以看到增发代币的这笔交易,原本应该由 minter_key 账户支付的手续费,变成了由 sponsor_key 账户支付。
前端项目源码可以前往 Conflux 前端。
git clone https://github.com/ObsidianLabs/conflux-frontend-react
npm install 或者 yarn 进行项目依赖安装
Conflux Portal 是由 Conflux 提供的浏览器插件,目前提供了 Chrome 及 Firefox 的支持,用户可以使用 Conflux Portal 进行私钥的管理以及交易签名。
前往 Conflux Portal GitHub 下载安装。项目的源代码在 GitHub 中可以找到。
在这里需要将 Conflux Studio 中生成的地址导入到 Conflux Portal 中。完成插件安装后,在 Conflux Portal 的页面中选择 Import,将 Conflux Studio 中的 minter_key 的私钥(在创建钱包章节中介绍了如何将私钥导出)粘贴到输入框中,点击 Import 按钮完成私钥导入。
在运行项目之前,需要修改一些默认的环境变量。
在前面的教程中部署合约后会生成一个 contractCreated,这个值便是部署在网络中智能合约的地址。打开项目根目录并找到 .env 文件,这个文件提供了项目的环境变量,将 REACT_APP_CONFLUX_COIN_ADDRESS 的值修改为 contract_addr。
使用 yarn start 启动前端项目,开发服务器运行起来后会在浏览器中打开前端页面(如果没有打开,请在浏览器中访问 http://localhost:3000)。
项目运行起来后,页面将显示四个卡片信息,分别为
点击右上角组件中的 Connect to Conflux Portal 按钮,Conflux Portal 页面将被打开,输入密码和选择账户后完成连接。连接成功后,将会在按钮下看到当前连接的账户地址以及账户中的 CFX 余额。
左下角的组件为 Coin 合约组件,可以通过这个组件调用代币增发和代币转账功能。
代币增发:选择 mint 方法并在 receiver 中填入增发地址 minter_key 地址和在 amount 中填入增发代币的数量 100,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
代币转账:选择 send 方法并在 receiver 中填入收款人地址 receiver_key 地址和在 amount 中转账代币的数量 20,点击 Push Transaction,在弹出的 ConfluxPortal Notification 窗口中点击 Confirm 按钮来确认交易。
选择 balanceOf 方法并在 tokenOwner 输入框中填入查询的地址,点击 Query Data 按钮可以查询到账户的余额。
选择 Sent 事件并点击 Query Data 可以查询到转账操作所触发的转账事件的记录。
项目使用 React 进行开发。主要由三大部分组成:视图组件、js-conflux-sdk 以及 Conflux Portal。
项目根目录下的 .env 环境变量,在这里定义了两个环境变量,分别为
REACT_APP_CONFLUX_NODE_RPC:Conflux 的网络节点地址,目前默认为 Oceanus 网络的地址
REACT_APP_CONFLUX_COIN_ADDRESS:已部署的 Coin 智能合约地址
视图组件在项目的 src/components 中,其中 App.js 为页面的主入口,负责页面的排列及合约信息的读取。
负责渲染 Conflux 网络信息,Node URL 的值为 .env 环境变量文件下的 REACT_APP_CONFLUX_NODE_RPC 设置的值(默认为 Oceanus 网络)。
负责渲染 Conflux Portal 的连接信息,并提供了连接 Conflux Portal 的交互按钮。
connectConfluxPortal 调用 Conflux Portal 的 enable 方法启用 conflux (conflux portal 实例由浏览器插件注入到 windows.portal 中),完成 enable 后调用 getAccount 方法获取到 Portal 中的账户。
refreshBalance 调用 Conflux SDK 的 getBalance 方法来更新账户余额信息
renderPortalButton 根据当前不同的状态,渲染连接 Portal 的按钮
负责渲染 Conflux 合约信息,本项目中提供了 Coin 和 SponsorWhitelistControl 两个合约。
ConfluxContract.js 由三个组件组成,分别为:
ConfluxContract 负责根据传入的合约 abi 来渲染合约的信息,包括合约地址、合约方法和事件,合约提交的交互逻辑及显示执行后的结果
ContractMethods 负责渲染合约 abi 中的方法和事件的表单及相对应的按钮
ConfluxForm 负责根据方法或事件的 abi 来渲染输入表单
lib 在项目的 src/lib 中,这里的文件主要是为视图提供包括连接网络、构造交易、获取账户、读取合约等服务。
conflux.js 是 js-conflux-sdk 的封装。js-conflux-sdk 是由 Conflux 提供的 JavaScript SDK,本前端项目使用 SDK 来连接 Conflux 网络,和合约进行交互以及构造合约中的实例。
conflux-portal.js 是 Conflux Portal 的封装,本前端项目通过调用浏览器插件来完成交易的签名。调用 Conflux Portal 提供的 enable 方法可以启动项目和 Conflux Portal 的连接(需要提前检查浏览器是否正确安装插件,在 constructor 中通过检查 window.conflux 是否为空来判断)。conflux-portal.js 提供了获取账户 getAccount 和发送交易 sendTransaction 两个主要的方法。
lib/abi 文件夹下提供了两个 json 文件,分别为 Coin.json 和 SponsorWhitelistControl.json,这两个文件是构造合约所需要使用的 abi 文件。
在本开发教程中,我们学习了如何使用 Conflux Studio 来完成一个完整的 Coin DApp 开发,其中包括了:
Conflux 基金会为了鼓励用户参与生态建设,提供了 Conflux Bounty 赏金平台。通过完成 Bounty 赏金平台发布的各项任务,参与者可以获得 FC (Fans Token) 作为奖励。
FC,全称 Fans Coin,是由 Conflux 基金会与社区成员共同研发的生态代币,用于记录和感谢对 Conflux 生态建设做出贡献的社区成员。FC 目前在 Oceanus 上运行,Conflux 基金会承诺,在主网上线后,锁定和未锁定的 FC 都可以与主网 CFX 进行 1:1 承兑,以此保障所有社区成员的劳动成果都可以获得奖励。
FC 赏金分配方案会展示在赏金任务详情页中,包括最高奖金数量、奖金分配人数、奖金数量分布、排行名次确定方式等信息。账号余额中的赏金奖励可以随时申请提现至 Conflux 钱包。Conflux 团队会对所有的提现申请进行审核。
对于已经通过的提现申请,Conflux 团队会在每周二中午 12 点(如遇节假日,往后顺延至下一个工作日)进行提币操作。完成提币操作后,您的 Conflux 钱包将会收到您提现的赏金奖励。
Conflux Bounty (https://bounty.conflux-chain.org) 的宗旨是为每一个通证找到价值。Bounty 分为几个板块:技术、品牌、社群、资源、其他等。
黑曜石实验室(Obsidian Labs) 是全球最大的区块链开发工具(IDE)提供商,也是 Conflux Studio 的开发团队,致力于为区块链开发者提供必备的工具及服务,帮助链上应用生态快速发展。目前,除了 Conflux Studio 外,Obsidian Labs 还为 EOS、Nervos、Substrate、Alogorand 等明星项目提供了专属的 IDE 和框架工具。
分享此文一切功德,皆悉回向给文章原作者及众读者.
转自:csdn
原文链接:https://blog.csdn.net/weixin_45029854/article/details/107638406
作者:Sam @黑曜石实验室
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
web3.js是以太坊提供的一个Javascript库,它封装了以太坊的JSON RPC API,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等,其中最重要的就是与智能合约交互的API。
下面就介绍如何使用web3.js提供的接口调用智能合约。
系统和软件
-
Ubuntu 16.04 64位
-
nodejs 6.10.0
-
npm 3.10.10
示例合约
本文以下面的MetaCoin合约为例,说明在应用中使用web3.js操作智能合约的方法。
-
// 本文中用到的MetaCoin合约
-
pragma solidity ^0.4.2;
-
-
contract MetaCoin {
-
mapping (address => uint) balances;
-
-
event Transfer(address indexed _from, address indexed _to, uint256 _value);
-
-
function MetaCoin() {
-
balances[tx.origin] = 10000;
-
}
-
-
function sendCoin(address receiver, uint amount) returns(bool sufficient) {
-
if (balances[msg.sender] < amount) return false;
-
balances[msg.sender] -= amount;
-
balances[receiver] += amount;
-
Transfer(msg.sender, receiver, amount);
-
return true;
-
}
-
-
function getBalance(address addr) returns(uint) {
-
return balances[addr];
-
}
-
}
这个合约有三个函数:
MetaCoin:构造函数,在合约被部署到区块链时执行
getBalance:返回某账户的余额,它只读数据,不会修改数据
sendCoin:向另一个账户发送指定数量的MetaCoin,它会改变状态变量balances
启动一个以太坊节点,将上面的合约部署到区块链中,并记录下合约的地址,可以通过truffle部署,具体参考这篇文章。 接下来就可以按照下面的步骤在项目中通过web3.js来使用这个合约。
添加web3到项目中
首先新建一个Nodejs项目并初始化:
-
$ mkdir web3test && cd web3test
-
$ npm init
会提示输入项目信息,全部默认即可。
接下来下载web3.js到项目中:
$ npm install web3 --save
以上命令会将web3.js下载到web3test/node_modules目录下,其中–save参数会web3.js添加到package.json配置文件中。
创建web3对象
要使用web3.js与区块链交互,需要先创建web3对象,然后连接到以太坊节点。 在web3test目录下新建index.js文件,在其中输入以下代码:
-
var Web3 = require("web3");
-
// 创建web3对象
-
var web3 = new Web3();
-
// 连接到以太坊节点
-
web3.setProvider(new Web3.providers.HttpProvider("http://localhost:8545"));
获取已部署的合约实例
要使用智能合约,必须先从区块链中获取到合约实例,获取合约实例需要合约的ABI和合约的地址:
-
// 合约ABI
-
var abi = [{"constant":false,"inputs":[{"name":"receiver","type":"address"},{"name":"amount","type":"uint256"}],"name":"sendCoin","outputs":[{"name":"sufficient","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"getBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"}];
-
// 合约地址
-
var address = "0xb2cdd356e58280906ce53e1665697b50f88aac56";
-
// 通过ABI和地址获取已部署的合约对象
-
var metacoin = web3.eth.contract(abi).at(address);
metacoin就是获取到的合约对象实例,此时metacoin对象中就包含了与合约函数同名的Javascript函数,之后就可以通过metacoin对象来调用合约中的函数了。
调用合约函数
MetaCoin合约中有两个函数:getBalance和sendCoin,可以通过metacoin对象直接调用这两个函数。
首先来看getBalance,由于getBalance函数只是从区块链中读数据,而不修改数据,因此我们通过在getBalance后面加上.call()的方式调用:
-
var account_one = web3.eth.accounts[0];
-
var account_one_balance = metacoin.getBalance.call(account_one);
-
console.log("account one balance: ", account_one_balance.toNumber());
这里:
在getBalance后加上.call()来显式指明用call的方式调用
通过call的方式调用可以得到getBalance函数的返回值
通过call的方式调用的函数只在节点本地虚拟机中执行,不会产生交易,不会花费费用,不会修改数据
下面来看sendCoin函数,由于sendCoin要修改合约内部的数据,所以要使sendCoin生效,必须要向区块链发送交易,可以在sendCoin后面加上.sendTransaction()来指明这是一笔交易:
-
var account_one = web3.eth.accounts[0];
-
var account_two = web3.eth.accounts[1];
-
// 提交交易到区块链,会立即返回交易hash,但是交易要等到被矿工收录到区块中后才生效
-
var txhash = metacoin.sendCoin.sendTransaction(account_two, 100, {from:account_one});
-
console.log(txhash);
这里:
在sendCoin函数后加上.sendTransaction()指明要向区块链发送交易
合约代码中sendCoin函数只有两个参数,而在web3中通过.sendTransaction()调用合约函数的时候需要增加最后一个参数,它是一个javascript对象,里面可以指定from/value/gas等属性,上面的例子用from来指定交易的发送者
上面的调用语句执行后,会向区块链提交一笔交易,这笔交易的发送者是account_one,接收者是metacoin的地址,交易的作用是以account_two和100作为参数执行合约的sendCoin函数
函数会立即返回交易的hash,表明交易已经提交到区块链,但是并不知道交易何时处理完成,交易要等到被旷工收录到区块中后才会生效
监听合约事件
当通过.sendTransaction()调用合约的时候,交易会被提交到区块链进行处理,这个处理需要一定的时间,如果需要等交易完成之后再执行其他操作,就必须要知道交易何时完成,那么如何知道交易何时完成呢?可以通过监听合约事件来实现。
在合约中可以定义事件,事件可以带有参数,在合约函数内部完成某些操作时,可以触发事件,向外界传达一些信息。例如,在MetaCoin合约中定义了一个事件叫做Transfer,表示一个转账的事件,它带有三个参数:交易的发送者、接受者、转账数量。在sendCoin函数中,转账成功后就会触发Transfer事件,将对应的参数传给该事件,这样外部监听到事件后,可以取出事件的参数来获得交易发送者、接收者、数量。同时事件中还带有其他信息,比如交易hash等。
在web3中使用事件,要首先获取事件对象,然后监听事件,如果事件发生,就会在回调函数中获取到事件信息:
-
// 获取事件对象
-
var myEvent = metacoin.Transfer();
-
// 监听事件,监听到事件后会执行回调函数
-
myEvent.watch(function(err, result) {
-
if (!err) {
-
console.log(result);
-
} else {
-
console.log(err);
-
}
-
myEvent.stopWatching();
-
});
-
-
// 输出:
-
{ address: '0xb2cdd356e58280906ce53e1665697b50f88aac56',
-
blockNumber: 651,
-
transactionIndex: 0,
-
transactionHash: '0xcc71bc2824cc84d1ee831c46189e3a80cf0af05697ba0370693aa97390c8067b',
-
blockHash: '0x1d53f04206f3926d0f311b1230a9dd0b0c5aadac35b169a6a609e384ab130c6f',
-
logIndex: 0,
-
removed: false,
-
event: 'Transfer',
-
args:
-
{ _from: '0x68b73956d704007514e9257813bdc58cdf3c969a',
-
_to: '0x9c3c1a2f5ef913fac44f0348a78f68d835f3f26e',
-
_value: { [String: '100'] s: 1, e: 2, c: [Object] } } }
从输出可以看出,获取到的事件信息包括事件的参数、事件名、区块号、交易hash等。
通过检测事件中的transactionHash与调用合约函数返回的交易hash是否一致,可以判定某一笔交易是否已完成:
-
var account_one = web3.eth.accounts[0];
-
var account_two = web3.eth.accounts[1];
-
-
var account_one_balance = metacoin.getBalance.call(account_one);
-
console.log("account one balance:", account_one_balance.toNumber());
-
-
var txhash = metacoin.sendCoin.sendTransaction(account_two, 100, { from: account_one });
-
-
var myEvent = metacoin.Transfer();
-
myEvent.watch(function (err, result) {
-
if (!err) {
-
if (result.transactionHash == txhash) {
-
var account_one_balance = metacoin.getBalance.call(account_one);
-
console.log("account one balance after sendCoin:", account_one_balance.toNumber());
-
}
-
} else {
-
console.log(err);
-
}
-
myEvent.stopWatching();
-
});
-
-
// 输出:
-
account one balance: 7000
-
account one balance after sendCoin: 6900
watch中的回调函数如果被执行,说明事件已被触发,也就是说某笔交易已经处理完,检查交易hash是否一致,可以判定产生这个事件的交易是否是自己发送的交易,如果是,就可以进行其他操作,比如查询最新的余额
分享此文一切功德,皆悉回向给文章原作者及众读者.
转自:csdn
免责声明:蓝蓝设计尊重原作者,文章的版权归原作者。如涉及版权问题,请及时与我们取得联系,我们立即更正或删除。
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务
蓝蓝设计的小编 http://www.lanlanwork.com