缘起

今天与一个做web前端的哥们闲聊了一会,他今天遇到了一个问题:就是在做一个混合开发的APP时候,他们H5端有一个页面需要做搜索,就是在搜索框内输入能够实时的展示搜索结果。

一. 证书

本篇文章讲的是我做的一个仿微信分享到朋友圈的功能。事先声明,楼主并不知道微信的分享具体是怎么实现的,只是按照楼主自己的想法做了一个。而且,比较简陋。这篇文章主要是我上一篇文章的一个延伸。很多知识点在上一篇文章讲过了,这里就不再重复了。建议先看了上一篇文章再来看这篇文章。入口:打开另一个APP(URL
Schemes与openURL)

想法与问题

他想监听了搜索框并且实时的进行数据的请求。后来发现输入的过程一直在进行远程数据的请求,他觉得这样消耗太大了。于是想做一个延时的操作,就是等用户稍微停止输入的时候才去远程请求数据。可是没有理清这个逻辑,于是他的方法相当的复杂,好像是要将每一实时输入的数据存入数组,然后进行对比,当延时完成进行对比决定请求的数据。

  1. 准备首先你需要有一个苹果开发者账号+Mac系统电脑PS:没有账号的可以在(.

  2. 申请发布证书2.1首先进入AppleDeveloper(
    苹果开发者中心)点击右上角Account.

    图片 1imgA.png2.2登录申请的Apple
    ID 点击Certificates,I

  • MyApp使用带了参数的url打开WXApp
  • WXApp在handleOpenURL回调中获取MyApp带过来的url
  • WXApp根据url的参数来跳转到朋友圈,并且给朋友圈分享内容。
  • 5秒之后,弹出alertView,选择是留在微信还是返回MyApp。
  • 根据用户的选择执行相应的动作。

插曲

但是他在这个过程中发现了一个问题,就是延时操作并没有减少网络请求的次数。这个问题在前段时间的项目中我也遇到了,就是延时操作并不是重复了,就不执行了,延时操作只是延缓操作时间,每一次的延时都会被执行。所以想要减少执行次就必须在延时操作未执行
前取消延时操作。取消的延时操作如果还没有执行,就不会执行了而不是取消后就立即执行。

图片 2B2656D5B-0DBB-4247-8626-F6EDE494F3AB.png

讨论

这时候我想起几天前在简书上看见一个哥们写了一篇关于如何防止button被重复点击的文章,他一共介绍了三种方法,他的第二种方法:

[button addTarget:self action:@selector forControlEvents:UIControlEventTouchUpInside]- click:(UIButton *)sender { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(btnClicke) object:nil]; [self performSelector:@selector(btnClicke) withObject:nil afterDelay:1]; }

就是用的延时操作他的是在button的方法里面先取消延时方法,再添加延时方法,这个对于防止button重复点击来说并不是好的方法,因为这样会影响用户的体验,每次点击button不能及时的进行响应。但是对于我朋友的这个问题却是一个很好的选择。他原本就想减缓请求次数。

2.3 申请App ID

  • 创建一个名为“MyApp”的工程。这个工程是“我的APP”,是用来做分享用的。在Main.storyboard中添加一个button,点击这个button就执行分享的方法。

    图片 3创建MyApp工程并添加button事件

结论

我发现编程语言是相通的,虽然各有各的语法,但是实现思路是一样的。我竟然可以和一个前端的讨论问题,还给他提供了有用的方法。感觉很有成就感,特此记录。(嘿嘿,我准备学习一下前端,应该不难吧!)

图片 420160225163417721.png

点击加号,进入App ID 申请界面

- sharedToPengYouQuan:(UIButton *)sender { //创建一个url,这个url就是WXApp的url,记得加上:// NSURL *url = [NSURL URLWithString:@"weixin://dl/moments?title=hello&content=helloworld&urlschemes=shixueqian"]; //先判断是否能打开该url if ([[UIApplication sharedApplication] canOpenURL:url]) { //打开url [[UIApplication sharedApplication] openURL:url]; } else { //给个提示或者做点别的事情 NSLog(@"打不开weixin://。请检查有没有设置URL Schemes白名单或者有没有安装带有weixin://的应用"); } }

图片 520160225163739304.png

这个方法只是创建了一个url,并且openURL。下面解析一下这个url的具体参数,

Name是你要上传App的名字Bundle ID
这是你appid的后缀,这个需要仔细。因为这个内容和你的程序直接相关后面很多地方要用到,我用的是项目中的Bundle
ID(反正这样是最保险的)PS:一般格式 例:’com.yourcompany.yourappname’App
Services,默认会选择2项,不能修改,只需要选择上自己需要的服务即可,不知道在哪里看到说是必须要选上推送,否则后面就没有办法修改了,但是我自己测试的是可以修改的。如果不放心的同学可以选择上哦!然后点击Continue确认没有错的话直接点击Submit后点击Done即完成App
Id的创建

  • 使用weixin://这个URL Scheme来打开WXApp。
  • 使用weixin://dl/moments这个绝对路径来判断是否要跳转到朋友圈。
  • 使用title=hello&content=helloworld这两个参数来设置分享的内容。
  • 使用urlschemes=shixueqian来从WXApp跳转回MyApp。

3.创见证书3.1
创建证书请求文件此时需要Mac系统.先打开钥匙串.直接在launchpad中找到钥匙串访问打开.

图片 6yaoshichuan.png

  • 因为我们需要在分享完之后需要从WXApp跳转回来,所以需要设置URL
    Schemes,来让WXApp打开MyApp。步骤:选中MyApp工程->Info->URL
    Types->点击“+”->在URL Schemes栏填上 shixueqian

选中钥匙串点击钥匙串访问-证书助理-从证书颁发机构请求证书

图片 7设置URL
Schemes

图片 8100452c078gsvbg1vb0zrq.png

这样WXApp就可以通过shixueqian://来打开MyApp了。

在下图所示的界面,你的电子邮件地址:填你申请idp的电子邮件地址,常用名称,默认就好,CA空,选择存贮到磁盘,点击”继续”,选择保存的位置,比如选择桌面。下一步点击完成,你就可以看到你的桌面多了一个CertificateSigningRequest.certSigningRequest的证书请求文件

  • 设置URL
    Schemes白名单因为我们点击button的时候使用了canOpenURL:方法,故在iOS9环境需要设置URL
    Schemes白名单。步骤:点击info.plist文件->右键->Open
    As->Source Code->添加下面的代码

图片 9100506tfef6vehwf7667ef.png

4.制作Provisioning
Profile证书文件登录苹果开发者中心()
选择certificates选项下的All
点击右上角的加号PS:发布证书和开发者证书需要操作两次,分别创建,开发者证书用于真机调试,发布证书用于提交到AppStore

 <key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> </array>

图片 10095656cf66klgkwn69kw93.png

图片 11设置URL
Schemes白名单

然后下一步,会提示创建CSR文件,也就是证书签名请求文件

OK,我们的MyApp已经完成了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注