东东东 陈煜东的博客

月份存档: 十一月 2014

移动开发SNS微信、QQ社交分享

Google之前出了android wear,个人感觉很时髦,有个朋友就买了个moto 360,我们一起在上面开发一个应用。

Android Wear 开发现状

现在的android wear还没能独立成为一个设备,需要依赖手机进行更多的操作。现在的apple watch也是类似,计算能力大部分还是依靠手机端。

比如手表要访问网络,需要通过蓝牙发请求到手机上,然后由手机进行网络请求,再通过蓝牙返回给手表。这意味着,你想在android wear上开发一个app,那么必须也要在手机上开发一个app,两个配套使用。这个概念类似于智能设备或智能手环,智能手环上的数据需要通过蓝牙传送给手机,手机的app做更多信息的处理。只是手表上可以有更多信息的展示和交互。

社交分享方式一 使用SDK

我们有一个需求是:将我们设备的数据分享到微信朋友圈或者是QQ空间,让用户的数据和好友分享,然后好友可以查看他的分享,关注我们的app,形成一个闭环。

一开始想到的,我们在手机上开发的app调用手机QQ、微信的SDK的,来进行分享。因为这个方法有看见过,是第一直觉。

QQ空间分享

进入到腾讯开发平台下载SDK,查看QQ分享demo

说明:现在QQ移动开放平台的功能、下载已经不在QQ互联(http://connect.qq.com/)了。已经移到开发平台(http://open.qq.com/)。

微信分享朋友圈

进入微信开放平台,需要注册一下微信开放平台的账号,下载Android SDK,另外有个比较重要的调试资源签名生成工具需要安装,然后提交审核(审核的时间比较慢,要早提交),这样在分享到朋友圈的时候才会出现小尾巴。

具体的QQ分享SDK、微信朋友圈代码我就不多说了,官方有教程,网络上也有很多的教程。

问题一:手机分享必须通过用户参与才能分享

但是有个是想说明的:

从2014.3.31起QQ分享到QQ空间和微信分享到朋友圈必须经过用户的参与,不能程序(Server和app程序)通过HTTP API分享到用户的QQ空间或者微信朋友圈。

这个大家不用再苦苦寻找通过QQ分享说说的HTTP API接口了,我已经向内部人士多方确认过了。

官方网站原话:add_share和add_one_blog接口已于2014.3.31正式下线。请PC网站调用PC空间分享组件,移动端下载最新版本的SDK后调用shareToQQ或shareToQzone接口,以满足用户分享一条动态(feeds)到QQ空间的功能。

这么做的目的应该是让用户知道他们做了什么操作,并且会有什么样的结果。如果让程序自己通过HTTP API来请求服务器,那么用户完全无感知,不符合用户的感受。但是这样做就会让产品人员感到痛苦,因为让用户做最少的操作,来完成一个功能,是产品追求的。

问题二:让用户在你的体验手机上登录微信或QQ

  1. 前面说过了,手表不能独立存在,需要依靠手机,并且不是随便一个手机都能轻易连接手表的,需要在手机上安装程序才行(对于moto360来说需要最新的Andriod Wear、Google search、Googla Play)。

  2. 微信账号属于重要的私人社交账号,而且换个手机登录会有登录限制。也许你会问用你们自己的开发账号呀!那么问题就来了,那你还要让用户分享干嘛,分享不就是为了在他的好友圈产生关注,然后进入你的页面,导入新的用户,体验你的产品,形成一个闭环。

<

p>鉴于以上这些,你的产品要给用户体验,用户会容易的安装这些?会登录他自己的微信?显然不会。

社交分享方式二 二维码分享

二维码可以让用户通过相机扫描获得更多的信息,微信的扫一扫出来后也是风靡一时,现在也有很多东西是通过二维码扫描来进行的。

想象一下这个过程:

  1. 通过利用手机QQ、微信的扫描二维码得到一个URL
  2. 微信会自动打开网页,手机QQ会让用户看到URL,并需要用户确认,两者体验不同。
  3. 打开网页后,浏览信息。
  4. 分享到朋友圈或者QQ空间。
  5. 好友点开网址查看,体验,分享到自己的朋友圈、QQ空间,达成闭环。

通过二维码的方式完全解决了第一个用户需要使用体验手机登录的问题。

只是单次二维码的分享时间会比较长。

自定义微信网页的分享,调用微信JS API

在微信打开URL网页后,可以自定义分享的图文,或者调用微信的JS API来实现高级功能。

微信公众账号有一个JS API,WeixinJSBridge,例如这里,可以隐藏右上角的按钮。

官方的这个接口并没有开放给所有人使用,估计是微信公众账号放出来,但是权限没控制好吧。官方的接口不太好用,github上有一个微信JS API的封装类库,可以推荐使用一下,https://github.com/zxlie/WeixinApi

手机QQ的JS API

我问了手机QQ的JS接口,要想使用MobileQQ JS API是有域名权限控制的。目前还只能腾讯业务使用,将来或许会开放到QQ开放平台到,但是接口不会一下子放出来,会慢慢的放开。

看了下他们mqq的JS API接口,写的文档还不错。期待他们的对外开放。

二维码生成

网络上也有二维码类库,比如PHP版本的有phpqrcode,Python有qrcode、python-qrcode

总结

通过SDK和二维码分享的方式有些区别,有不同的使用场景。

区别:

  • SDK分享一般用在app分发到用户的手机上,需要用户安装app。
  • 二维码分享一般用在活动现场,用户扫描二维码直接分享。

分类: Web 开发

JS无法在非人为触发的事件下打开新窗口

本来想写个JavaScript测试脚本,自动打开新标签,去访问网页进行一个压力测试,因为JS需要去连接后台的数据,所以没办法使用ab这些工具去压测。看上去一个很简单的需求,却没办法自动实现。

使用window.open方法只能弹出一个小窗口,不能在新标签页中打开。这就有一个问题了,我当时打开的窗口有上百个,当达到一定数量后,整个chrome就崩溃了。原因我觉得应该是Windows对进程的使用空间有限制,打开一个标签后,chrome会给窗口分配一个新进程或者和其他老进程共用一个,这就会出现标签或者页面过多导致空间占用大,然后程序崩溃了。

后来想到了通过a标签,可以打开新的标签页,于是就对a标签进行事件的处理。发现同样的代码只有用户有click事件触发时,才会在新标签也中打开一个新窗口,如果使用setTimeout、setInterval这样的函数来调用,或者是在控制台里直接触发click是没办法在新标签也面中打开的,只能在小窗口中打开。也尝试了很多网络上说的方法,比如createEventtriggerdispatchEvent都不管用。

相关信息:之前看到一个文章,说Firefox等浏览器对event有一个新的属性event.isTrusted,可以查看一些这里还有这里

这里可能是浏览器对于打开新标签页有一些限制吧。不能让程序自动打开无数的标签,但是为什么可以打开新窗口却不能打开新标签页呢?

最后是通过chrome的一个插件New Tab Redirect来解决的,然后狂按ctrl+T来手工打开很多的新窗口。

相关资料

分类: Web 开发

Copyright © 2017 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑