61阅读

app推广案例分析-APP推广:案例分享如何玩转微信活动

发布时间:2017-11-06 所属栏目:texttospeech

一 : APP推广:案例分享如何玩转微信活动

下面,我就借这个案例来和大家说一说APP推广中微信活动的这些事吧。

案例分享

本次分享的案例是一款生活类APP,以水果出售为主要营利模式,面向地点是重庆,并有门店支持,介于这是一家刚开张不久的小企业,所以他们暂时还没有向外渗透的打算。因此,这次的双十二他们的活动是以重庆普通大众为主。

用户分析

在活动策划之初,他们重点分析了普通消费群体的心理特征,得出的结论是中国大部分的普通消费者,普遍存在二点心理特征。

第一点:免费的不要白不要

关于这一点,大家有兴趣的话,可以去各大商场开展一次市场调研后会发现,商场卖得比较好的商品,一定是涵盖着买一送一,买二送一,买三送一等相关商品。例:同样一包方便面,一品牌送了一个塑料碗,另一品牌没有,消费者选则哪一类?答案不言而欲吧。

第二点:贪小便宜

这里没有贬低的意思,事实上每一个会居家过日子的家庭主妇,都会在菜市场,在柴米油盐方面贪小便宜,能省则省,为何不省?这一点也是许多中国家庭的共通之处吧,总愿意自己的日子过的苦一些,以后能留多一些给自己的子孙。

活动策划

在分析完用户心理后,他们开始着重进行活动策划的相关安排。活动是以线上线下同步展开的方式进行。活动内容主要以商品打折为噱头。4.8折的商品折扣已足够吸引力,如果再免费送到家呢?而且使用京东APP与支付宝的用户,在4.8折的基础上将另有优惠,在几重优惠的吸引下,他们相信用户一定会被打动。

海报设计

海报设计与文案,是我的这位朋友新手完成的。对于他这位不是专业的PS来说,能做成这样,说实话,我已经很佩服他了。大家从他的海报设计与相关文案中,应该就能非常清楚得看出来他们此次活动的主打内容。

活动推广

上文有说到,他们活动推广的形式是以线上线下同步展开。由于是小企业,他们线上资源并不多,仅仅是针对一些微信群进行单一渠道的推广。线下方面,他们主要宣传形式有两点,第一点是门店推广,凡是进入门店消费的每一位顾客他们都有发宣传单,并亲自介绍活动的内容。另外,他们还请了几个兼职前往各大商场,其实也就主要集中在沃尔玛、京东购物广场等地发传单宣传。由上,可以得出他们宣传渠道并不太多,也没有大资金的投入。线上方面是微信群的转发,线下方面是以门店与小量地推的形式进行。

效果展示

这里要强调一点,他们的微信公众号是在活动开始之前的一周开始上线的,这一个星期的时间里,除去内部员工外,其真实的粉丝不到100人。但就在活动用微信公众号外推后,覆盖人群超过2万,直接阅读量已达到将近3204人。

当然这得益于加的许多微信群,也得益于整个团队的凝聚力。他们老板与员工在活动期间‘连哄带骗’的让身边的每一位新朋好友转发朋友圈,再加上线下的同步展开,微信粉丝开始大量增加,前三天就暴增700多粉丝,随后的四天随着线上资源已被耗得差不多,每天增加的粉丝开始减少。但定单量却是一天比一天多。

活动失败

从增加的粉丝与定单量来看,此次活动看似取得了完美的结果。但他们范了两个致命的错误,第一是老板送出去的水果或是打折扣的水果全是积压在库存的存货,也就是说他们老板是借此次活动在清库存。第二是我这位朋友与物流没有对接好,许多水果在物流运送过程中出现了挤压、变形,腐烂等现象。

如果说第二个问题是我这位朋友业务上的不熟悉,用户还可以谅解的话。那么他老板的行为简直就是人祸了,这位老板考虑的显然没有那么远,本来这种活动送出去的或打折后的水果都要拿最好的,这样能带来二次消费、三次消费还有转化消费。但如此一来,等于就是花钱买差评,得不偿失。而且在消费者收到水果后,纷纷表示不满,并直接在微信、QQ上找到我这位朋友要个说法,我这位朋友这几天也是被整得焦头烂额。

事后:因为这一次活动的失败,我这位朋友找我聊了很久,而也正是这次聊天,我知道了他们这次活动的全部流程。这位朋友现在的想法是,近期再弄一次活动,为的不是人气,而是口碑。

难度:有一句话是一朝被蛇咬,十年怕井绳,一但用户对你的第一映象是差评的话,再想重新挽回受伤的心绝不是一件简单的事情。我的建议是,近期不要举办类似的活动,因为上过一次当的用户们怒气未消,你再来这么一次,怒气冲冲的用户恐怕会过来砸场子哦。这个时候,谁都要冷静冷静,过段时间再说吧。

总结:从这次活动中,我们可以看出他们老板的因小失大,往小的看,只是一次活动的失败,往大的看,却是企业诚信的失败。有些过错,错了,可能就再也无法挽回了,而受伤的不仅仅是用户,还有自己朝自己的肋骨处划的这一刀。痛不痛,时间会告诉大家答案。

从一个真实的案例对微信活动的成功失败之处进行整理分析,希望对大家有所启发。

二 : Android ApiDemos示例解析(45):App->Text-To-Speech

从Android1.6(API Level 4)开始,Android平台开始支持文字到语音(TTS)功能,也就是“合成语音”,支持以声音方式读出文字。

目前Android TTS可以支持多种语言:English, French, German, Italian ,Spanish 等,也有公司提供了用于Android平台的中文TTS Engine。

TTS Engine 在读出文字前,需要知道使用哪种语言,比如“Paris”的发音,英语和法语发音就不同。因此TTS使用的语音库是跟语言相关的。在使用TTS之前需要调入相应的语音库。

尽管Android平台支持TTS,但具体的设备可能不自带某种语言的语音库,Android TTS可以查询需要的语音库是否存在,不在的户运行用户选择下载需要的语音库:

[java]
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

如果需要的语音库存在,则result code为CHECK_VOICE_DATA_PASS,表示TTS可以开始工作,否则可以通知用户下载指定的语音库。如果需要的语音库存在,则result code为CHECK_VOICE_DATA_PASS,表示TTS可以开始工作,否则可以通知用户下载指定的语音库。

[java]
private TextToSpeech mTts;
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
mTts = new TextToSpeech(this, this);
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
private TextToSpeech mTts;
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
mTts = new TextToSpeech(this, this);
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}
TextToSpeechActivity 介绍了TTS的一般用法,可以随机读出一个字符串数组中的文字。

TextToSpeech的构造函数 ,第一个参数可以使用当前Activity,第二个参数为TTS 初始化后回调函数onInit.

public TextToSpeech(Context context, TextToSpeech.OnInitListener listener)

例子中回调函数定义如下:

[java]
// Implements TextToSpeech.OnInitListener.
public void onInit(int status) {
// status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.
if (status == TextToSpeech.SUCCESS) {
// Set preferred language to US english.
// Note that a language may not be available, and the result will indicate this.
int result = mTts.setLanguage(Locale.US);
// Try this someday for some interesting results.
// int result mTts.setLanguage(Locale.FRANCE);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
// Lanuage data is missing or the language is not supported.
Log.e(TAG, "Language is not available.");
} else {
// Check the documentation for other possible result codes.
// For example, the language may be available for the locale,
// but not for the specified country and variant.

// The TTS engine has been successfully initialized.
// Allow the user to press the button for the app to speak again.
mAgainButton.setEnabled(true);
// Greet the user.
sayHello();
}
} else {
// Initialization failed.
Log.e(TAG, "Could not initialize TextToSpeech.");
}
}
// Implements TextToSpeech.OnInitListener.
public void onInit(int status) {
// status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.
if (status == TextToSpeech.SUCCESS) {
// Set preferred language to US english.
// Note that a language may not be available, and the result will indicate this.
int result = mTts.setLanguage(Locale.US);
// Try this someday for some interesting results.
// int result mTts.setLanguage(Locale.FRANCE);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
// Lanuage data is missing or the language is not supported.
Log.e(TAG, "Language is not available.");
} else {
// Check the documentation for other possible result codes.
// For example, the language may be available for the locale,
// but not for the specified country and variant.

// The TTS engine has been successfully initialized.
// Allow the user to press the button for the app to speak again.
mAgainButton.setEnabled(true);
// Greet the user.
sayHello();
}
} else {
// Initialization failed.
Log.e(TAG, "Could not initialize TextToSpeech.");

扩展:android apidemos / api demos / apidemos


}
}
status为TextToSpeech.SUCCESS表示TextToSpeech Engine成功初始化,然后设置语言为英语,如果本机带有英语的语音库,就可以开使使用speak来读出文本了。

下面代码从数组HELLOS中随机选择一句读出:

[java]
int helloLength = HELLOS.length;
String hello = HELLOS[RANDOM.nextInt(helloLength)];
mTts.speak(hello,
TextToSpeech.QUEUE_FLUSH, // Drop all pending entries in the playback queue.
null);
int helloLength = HELLOS.length;
String hello = HELLOS[RANDOM.nextInt(helloLength)];
mTts.speak(hello,
TextToSpeech.QUEUE_FLUSH, // Drop all pending entries in the playback queue.
null);
每个TTS Engine 使用一个队列用于合成语音,TextToSpeech.QUEUE_FLUSH意味着清除队列中内容,将本句放在队列的首位, 而TextToSpeech.QUEUE_ADD表示添加到队列的后面。

texttospeech Android ApiDemos示例解析(45):App->Text-To-Speech

作者:mapdigit

扩展:android apidemos / api demos / apidemos

三 : 案例分析:嘀嘀打车App初期是怎么推广的?

嘀嘀打车app 案例分析:嘀嘀打车App初期是怎么推广的?

程维在嘀嘀打车2012年9月9日上线之前,把产品拿给了美团网创始人兼CEO王兴看。[www.61k.com]2014年3月1日,王兴告诉我:“程维很实干,我没想到他能做这么大。”

目前,北京10万名出租车司机有7万多人安装了嘀嘀打车的软件,6.7万辆出租车里近5万辆安装了嘀嘀打车的软件。嘀嘀打车在全国开通近百个城市,安装了48万个司机端,几千万乘客端。

嘀嘀创始人兼CEO程维说:“移动互联网的速度以分钟计,以秒计,不能懈怠,战役一场接一场。”出生于1983年的程维,创业一年半。他创办的嘀嘀打车,是一款基于移动互联网技术的打车软件,用户可以通过软件预约出租车。

创业之前,程维是阿里巴巴的员工,先在阿里巴巴B2B工作六年,后在支付宝工作两年,做到事业部副总经理的级别。他看到创业者拼杀,心里痒痒的。有9个月的时间他在思考到底想要做什么。他想,首先得是足够大的事情,承载他对世界的梦想;其次,得符合移动互联网的趋势。

他思考的时候是2011年下半年,当时电商热潮还没有过去,最先考虑到的是做家居电商,这个创业项目太重了,链条太长了,又要找好的设计师,又要找好的代工厂;也考虑过做企业管理培训,阿里巴巴有一套管理经验,不过优质讲师是很难复制的;还考虑过做本地生活服务的点评网站,帮助人找到好的理发师等等。程维先后否决了6个主意,想到衣食住行,互联网能否改变出行的方式?他在媒体上看到有关国外租车软件的报道,但没有搜索到国内的打车软件。

程维问了很多人,十个里有十个说,这个怎么可能做得起来?最主要的理由是司机不缺订单,为什么要抢你的活?路上都是活。第二个反对理由是,司机都是大叔,是郊区的农民,哪有人用智能手机的?程维自己打车,接连问了五六个司机,没有一个有智能手机,很受打击。还有人认为在这种诚信体系下,叫车服务是不靠谱的。“这些听听都是道理,但我觉得趋势是一直往前的,智能手机会越来越便宜,谁都会用,出租车这个行业,肯定会被互联网给渗透。路边打车这种低效率的方式会被更高效的方式取代。”程维说。

四 : Android中app卡顿原因分析示例

在知乎回答了一个“为什么微博的app在iPhone比Android上流畅”的问题。[www.61k.com)后面部分是一个典型的动画卡顿的性能分析过程,因此帖在这里。有编程问题可以在这里交流。知乎链接。

=========================================================

我来说下我所知道的事情。我不知道iOS为什么流畅,但我知道一些Android为什么不流畅的原因。

首先,就题主所说的问题,我用iPad和小米Pad对比了一下微博滑动滚屏这件事情(2014年8月10日目前微博app最新版本)。正如题主所说,直观感受上明显感觉iOS要流畅、舒服。

在这件事情上我认为主要是这三个原因:

  1. 速度曲线。
    当你滑动界面然后松手,这时界面会继续滑动,然后速度减小,直到速度为0时停止。iOS下速度减小的这个过程比较慢,尤其是快要停的时候是慢慢停的,视觉上有种很顺滑的感觉;Android下则从松手到停要快很多,相比之下有种戛然而止的感觉。
    从数据/技术角度来看这个事情,我们滑动界面的最终目的不是为了“动”,而是为了“停”,因此只要平滑的到达目的地,似乎越快完成这个过程越好,所以Android的选择是理所当然的。但事实是,大家普遍更喜欢iOS的方式,这样做显得更顺滑、更优雅。
  2. 帧率。
    绝大部分时间两者都能保持60FPS左右的满帧率。但都会有偶尔的掉帧。并且Android上要比iOS上严重很多。(好吧,比起前两年,已经好太多了。)我前前后后滑动了几十次,iOS在前面遇到1次掉帧,后面就很稳定了。而Android几乎每滑动一次都会伴随一次掉帧。这完全就是真真实实的卡顿,用户必然会感觉到那一刻的不流畅。Android掉帧的原因我后面再详细分析。
  3. 触摸响应速度。
    从手指碰到触摸屏,到屏幕上显示处理这次触摸产生的画面,是需要时间的。时间越短感觉越跟手。据说iOS的触摸屏的处理时间要比一般的Android手机快,这不是我的专长,不知道怎么验证。但在软件系统层面,Android的显示机制是app-->SurfaceFlinger-->Display,这比传统的app-->Display多了一步,主要基于这个原因,画面最终输出到屏幕要比传统的方式慢一帧(16.7ms)。

我觉得第1点造成的影响最大,恰恰却是最技术/设备无关的。如果微博app或者Android系统要改变,很容易就可以调得跟iOS一模一样。但正是由于这是产品形态上的差别而不是纯粹技术上的优劣,反倒成了Android最不太可能改变的。

第2点的影响其次,当然是指在目前这个大部分时候都能满帧的情况下。这方面是Android从早期到现在进步最明显的方面,使用了很多方法来优化帧率。但就算现在Android进化了很多,硬件性能也进化了很多,却仍旧不可能彻底消灭掉帧的情况。

第3点通俗的讲就是跟手性,跟手性的重要性不言而喻,但现在的差别比较细微,且具体数据我也不清楚。
我想过一个办法让桌面、微博这种内容和手一起动的应用绘制到屏幕的速度快一帧(16.7ms),其实就是抵消之前提到的慢的那一帧,需要framework层和app层一起配合改动,目前已申请了专利但代码还没进,将来有时间了应该会进到MIUI。感兴趣的可以看看专利:滑动操作响应方法、装置及终端设备。

最后我来用专业技术分析一下微博app在Android里掉帧的原因。非编程人员可以不看下去了。(这个过程我使用的是小米3高通版+最新版微博app。)

最初,我认为这种现象很像GC(垃圾回收)导致的,于是打开logcat观察每次卡顿的时候有没有GC发生。结果发现并没有。停下来的时候才会有GC,这说明微博app在滑动过程中控制得不错,在停下来的一刻才去分配内存,使GC不影响帧率。

然后我打开“开发者选项”->“GPU呈现模式分析”->“在屏幕上显示为条形图”(好像是4.4才有这个选项,之前的只能在dumpsys里看),这会在屏幕上直观的显示每帧绘制花费的时间。屏幕上有条基准线大概是16ms,如果超过这条线则很有可能掉帧了。如果下面的蓝色部分很长则说明是软件draw的部分太费时,那么可以通过traceview来继续分析draw的java代码。(我假定了现在的app都是硬件加速的方式。)如果中间红色部分很长则说明是OpenGL ES绘制过程太费时。可以用gltrace来分析OpenGL ES的调用过程。
打开选项后使用微博app,发现虽然偶尔有超基准线,但并不严重,并且卡顿的时候并没有明显异常。

于是我开始使用systrace,这下就很明显了:
卡顿 Android中app卡顿原因分析示例

可以发现每隔几帧,就会有一次大间隙,图中我圈了红圈圈的两个地方都明显超过正常的耗时时间。现在问题是,这些地方的代码在干什么呢?是什么花费了这么长时间?
卡顿 Android中app卡顿原因分析示例

放大后发现都是这两个:obtainView和setupListItem。它们都是在draw之前调用的,这也解释了通过上一步的方法(“GPU呈现模式分析”)为什么没有显示出来,因为那个方法只展示draw里面的时间消耗。
通过在源码里搜索obtainView和setupListItem,可以发现是AbsListView的obtainView方法和ListView的setupChild方法打下的这个log。

接下来,我们用traceview来看看这两个方法里面究竟调用了什么代码导致耗时过长。
跟踪obtainView最终到了这里:
卡顿 Android中app卡顿原因分析示例

代码混淆了,看不太出来了,也懒得再跟下去了。但随便点了点然后看到:
卡顿 Android中app卡顿原因分析示例

TextView.setText用了挺多的时间。感觉Android团队应该优化优化这个方法。
然后再来跟踪setupChild方法:
卡顿 Android中app卡顿原因分析示例

扩展:android 卡顿分析 / android app卡顿原因 / android 视频卡顿原因

都是measure占用的时间,并且调用次数比较多。这应该说明了View的数量不少。用hierarchyviewer看了下,的确不少,一条微博有50多个View:
卡顿 Android中app卡顿原因分析示例
结论:我们最终大致找到了耗时的代码及部分原因。这两个耗时方法应该都是有可能减下来的,但应该不那么容易。
在Android上实现功能比较容易,但如果默认实现有了性能问题,要想解决就不好说了,有时候要绕很远。


最后,列一些相关链接:
Android图形架构(绘图慢一帧的事情这里有说):
Android Performance Case Study:

扩展:android 卡顿分析 / android app卡顿原因 / android 视频卡顿原因

五 : app store网上充值教程案例分享

App Store 拥有堪称世界级的庞大移动 app 库,如游戏,办公,休闲之类的应用。 当遇到自己喜欢的一款应用软件时,想要在 App Store 中购买应该如何操作呢? 在中国地区购买付费 App 程序时以银行卡充值的方式, 这里以 Windows7 版 iTunes 11 为例,简单介绍一下如何用电脑上的 iTunes 为 App Store 充值的方法。

1、首先打开电脑上的 iTunes ,点击左上角的倒三角图标,如图所示

App Store 怎么充值

2、然后在弹出的菜单栏中,选择“iTunes Store>登录”,如图所示

App Store 怎么充值

3、接下来输入自己的苹果账户和密码,如图所示

App Store 怎么充值

4、然后又回到菜单栏中,选择“iTunes Store>显示我的 Apple ID”,如图所示

App Store 怎么充值

5、接下来再次输入苹果账户的密码,点击“显示账户”按钮,如下图所示

App Store 怎么充值

6、随后在“帐户信息”页面中点击“充值”选项,如图所示

App Store 怎么充值

7、在帐户充值页面中选择要充值的金额,再选择要付款的“银行卡”,点击“继续”按钮,如图所示

App Store 怎么充值

8、随后 iTunes 会自动在浏览器中打开银行的付款页面,按照银行的要求付款即可,如图所示

注:银行不同,付款显示的页面也会不同。

App Store 怎么充值

9、付款成功以后,回到 iTunes 页面,点击“完成”按钮返回帐户信息,如图所示

App Store 怎么充值

本文标题:app推广案例分析-APP推广:案例分享如何玩转微信活动
本文地址: http://www.61k.com/1107102.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1