|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用代码控制view意思他们玩的都是高科技IB都是垃圾很多人也纠结到底用不用IB的确很多时候IB灵活度不行但是不需要灵活度的时候还不用IB那不是装X吗要是没人用苹果还开发IB干嘛早去掉了IB在很多时候节省很多工作量UINavigationController再说说NavigationController刚接触开发的时候不明白View和View之间怎么切换的前段工夫做过两次关于Phonegap的现场交换集会分享。基础上把Phonegap的一些特征和人人交换了一下,人人关于Phonegap的乐趣也长短常多的。可是由于Phonegap相对原生使用来讲,只要一个View,这个View就是一个Web的容器,这使得Phonegap就存在良多限定。个中一部分的限定我们已经由过程HTML5的Api和Phonegap为我们搭建的桥往完成了,别的一部分我们就得经由过程Phonegapplugins来完成,而实践上我团体以为Phonegap最壮大的中央也在于有那末年夜的一个群体在为他供应林林总总的Plugins,以便往应对实践项目中碰到的成绩。
我记得在和人人交换的时分人人常常会问Phonegap怎样做当地的缓存啊(WebSQL),怎样切近原生使用(这个触及到架构,界面衬着成绩,这里我也欠好深切讲,究竟不是本文要会商的内容),另有一个很头疼的成绩就是假如要做一个开放平台的使用,假如完成oAuth认证。此前我也碰到过相似的一些情形,当我再次碰到这个辣手的成绩的时分,我信任必定也有Phonegap的粉丝碰到相似的情形的。因而我就总结上去何人人切磋一下怎样办理这个成绩吧。
起首方针:办理oAuth认证。
制订企图:1,晓得oAuth道理;2,懂得Phonegap在处置这个成绩时分的运转机制;3,制订企图完成代码。
上面我们就来一步一步地剖析,看怎样办理这个情形吧。(由于我在项目中碰到的是腾讯微博开放平台的oAuth认证,那末上面我就用腾讯oAuth认证为例吧)
关于oAuth认证,信任做过开放平台使用的伴侣都已十分熟习了,假如你还没有做过大概关于oAuth认证流程十分不懂得,那末我倡议你先懂得一下道理,在这里我不但愿花太多的篇幅往先容这个工具,由于在良多中央都能够找到,上面我保举两个地点便利人人往浏览,必定要浏览,这会对你了解上面的文章有莫年夜的匡助的。
腾讯微博开放平台:http://wiki.open.t.qq.com/index.php/OAuth2.0%E9%89%B4%E6%9D%83
新浪微博开放平台:http://open.weibo.com/wiki/Oauth2
固然在这里下面必要论述申明的是oAuth认证机制是一个通用的伎俩,可是由于每一个开放平台有本人的政策,因而大概在个中稍有改动,并且终极取得的权限也会各不不异。而比来新浪微博其实太多坑爹的事变了,其实忍耐不了,因而我转战到腾讯的平台了。
好的,假如你看完了oAuth认证的流程,就间接到这里来。尽人皆知,在oAuth认证的流程中,有一个受权页面,而这个受权页面是经由过程开放平台供应的,详细的款式见下图:
<br>
这个页面用于输出开放平台的帐户和暗码,经由过程受权猎取呼应的openid和openkey,终极调换access-token(待会我会分离腾讯微博oAuth认证流程的特性,和代码和人人剖析的)。
这个页面是弹出的,假如在Phonegap内里做的话会很奇异:1,由于属于弹窗,在Phonegap中自己就是一个WebView假如你还弹的话就会飞到了Safari的扫瞄器中,这就跳出使用自己,跳进来认证另有戏吗?2,经由过程iFrame,起首体验十分欠好,其次iFrame自己又属于跨域的成绩,这就欠好办理了(为何体验欠好呢,次要是由于受权页面的款式是不流动的,相似腾讯微博开放平台,就比新浪的受权页面做得差,基本反面手机婚配的,并且有些做得好的,认证页宽度就是320px,就占了你全部使用的版面,体验很欠好)那末Phonegap中该怎样完成呢?
带着成绩,我们就但愿在Phonegap中再度引进一个WebView。方才提到Phonegap的壮大还在于良多人和官方的团队,为其供应了一套很好的插件机制,以办理林林总总的必要。在Phonegap中有一个插件叫做ChildBrowser,望文生义就是:子扫瞄器。(实在我在上两次的Phonegap专题手艺分享中和说起到让人人用这个工具往办理,不外事先分享工夫无限只可以轻率带过,抱愧)子扫瞄器的感化实在就是让你在Phonegap使用外部调起一个扫瞄器的View,让你举行pdf,图片,视频,乃至网页浏览的工具。(实践上你看我下面的截图,就是用ChildBrowser来完成的)这就行了,这就能够让你调起扫瞄器并且不跳出使用自己了,能够很好地办理oAuth认证的成绩。ChildBrowser下载地点:
https://github.com/phonegap/phonegap-plugins/tree/master/iOS/ChildBrowser
在地点下面,你应当已看到ChildBrowser的安装办法和利用办法了,十分复杂,真实的即插即用。假如你以为英文太难,这我就帮不了你了,你就自行Google翻译一下吧。信任你很快就能够做出一个ChildBrowser的Demo的。在这个地点下面,实在你前往上一层目次,实在你也已看到形形色色的PhonegapPlugins,经由过程这些工具,你还能够挪用起手机外部更多风趣的资本的!这个就要靠你本人往开掘啦!(其他平台的使用也有响应的插件的Android开辟者不要骂果粉哦!)
https://github.com/phonegap/phonegap-plugins/tree/master/iOS
好了渐渐地我们就要触及到代码部分了。起首我们看看挪用ChildBrowser的Javascript代码:- cb=window.plugins.childBrowser;/*if(cb!=null){cb.onLocationChange=function(loc){root.locChanged(loc);};//地点产生改动时分实行的函数cb.onClose=function(){root.onCloseBrowser();};//经由过程js封闭ChildBrowser的举措cb.onOpenExternal=function(){root.onOpenExternal();};*/cb.showWebPage("http://google.com");
复制代码 个中cb就是初始化的ChildBrowser,而showWebPage就是调起这个页面的办法。可见代码中要翻开的网址就是Google.com啦,这个地球人都可以看得懂了。因而我们就能够即刻想到我们要用ChildBrowser翻开的网址是我们在网上指定的使用受权站点了。而我是部署在SAE下面的,以是上面的例子也用PHP来讲吧,等候言语也是不异的事理,本义就能够了。在说代码之前,我们先来讲说详细通信的流程,和我们接上去要到达的方针。
<br>
在这里,我们的手机端是经由过程会见SAE服务器,由SAE服务器办理数据并与腾讯微博开放平台通信的,这内行机端并没有间接和腾讯微博开放平台通信(我如许处置的缘故原由是1,便利在服务器端办理帐户,如许的话能够察看本人的使用的帐户情况;2,服务器端完成推送机制,便利办理token和做api;3,服务器端还能够和其他开放平台帐户绑定)。因而,我们的整套认证计划会在服务器端完成。
而依据腾讯微博开放平台,我们起首会在开放平台下面注册本人的使用,注册的流程和举措我不说了,注册的地点是:http://dev.open.t.qq.com/development/,注册你的使用后,你响应可以取得的工具是:- 使用称号:mobile_test_api使用范例:客户端使用AppKey:88888888AppSecret:ainidenideiienfeomeomroemrome
复制代码 在这里我的Appkey和AppSecret是假的(你懂的,你应当有你本人的),上面我们就利用腾讯供应给我们的PHPSDK,下载地点:http://wiki.open.t.qq.com/index.php/SDK%E4%B8%8B%E8%BD%BD。有了SDK后我们就能够把SDK放到本人的情况下面,然后设置服务器真个代码了。下图是我复杂设置的服务真个代码,lib下寄存的就是腾讯微博的sdk。固然实践临盆情况和这个有分歧。这里仅仅作为演示利用:
<br>
上面就依据腾讯微博认证的流程,一一解说一下这些文件和外部的代码吧。
index.php- <?phprequire_onceapp_config.php;$url="https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=".$client_id."&APP_KEY=".$app_key."&wap=2&response_type=code&redirect_uri=http://yoururl.com/get_auth.php";//指定URL地点header(Location:.$url);
复制代码 这里引进的app_config.php- <?php$client_id=8888888888;$app_key=anienineiienrieireowq2839289;
复制代码 由于依据腾讯微博开放平台,我们第一步要猎取的是Code,以下所述,我们要做的就是做好设置,猎取这个Code- 第一步:哀求code哀求办法:GET哀求地点:https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&response_type=code&redirect_uri=http://www.myurl.com/example前往了局:假如受权乐成,受权服务器会将用户的扫瞄重视定向到redirect_uri,并带上code,openid和openkey等参数,重定向的url以下:http://www.myurl.com/example?code=CODE&openid=OPENID&openkey=OPENKEY
复制代码 详细必要哀求附带的参数,必需要依照oAuth2.0鉴权的页面提醒的举行。(http://wiki.open.t.qq.com/index.php/OAuth2.0%E9%89%B4%E6%9D%83)
然后我们再来看看我们所设置的文件:
get_auth.php- <?phprequire_onceapp_config.php;$code=$_REQUEST[code];$openid=$_REQUEST[openid];$openkey=$_REQUEST[openkey];$url="https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=".$client_id."&client_secret=".$app_key."&grant_type=authorization_code&code=".$code."&redirect_uri=http://yoururl.com/get_auth.php";$message=file_get_contents($url);/*successtoprinttheaccesstokenmessage*/$access=explode("=",$message);print_r("<br/>");$access_message=explode("&",$access[1]);$access_token=$access_message[0];$user_name=$access[4];print_r($access_token."".$user_name);
复制代码 实在到以上为止,我们的设置文件已弄好了。在这个设置文件中,实践上我们要做的就是腾讯微博开放平台中说起的第二步:- 第二步:哀求accesstoken哀求地点:https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&client_secret=APP_SECRET&redirect_uri=http://www.myurl.com/example&grant_type=authorization_code&code=CODE前往了局:前往字符串:access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN
复制代码 假如你如今已设置好你的服务端口,已设置妙手机真个ChildBrowser,你就已能够在手机下面看看全部认证的流程了。如今的事情已完成了年夜部分了,不外仔细的伴侣大概会发明,对啊,认证是完成了,手机上仍是没有取得受权啊,由于受权后的信息还不克不及够经由过程手机往猎取。不要急,ChildBrowser风趣的中央还没有完呢。在手机端下面我们完成了oAuth认证,总有一些参数前往,不论accesstoken是不是存在手机端,你总得有个帐户机制和服务端通信。我的服务端在SAE下面,我就创建一个独一id给手机,因而我就创建了一个帐户机制,存在服务端上,服务端上存储的工具是:- CREATETABLEIFNOTEXISTS`auth_user`(`id`int(10)NOTNULLAUTO_INCREMENT,`muser`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`access_token`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`openid`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`openkey`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`name`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`create_time`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=utf8COLLATE=utf8_unicode_ciAUTO_INCREMENT=1;
复制代码 实在这个表也还没有完美,我必需还要记录这个用户是不是在线(假如有推送机制)。今后手机端和服务端通信就经由过程下面的id和token等的信息举行通信,再经由过程服务端想腾讯微博举行api的通信,猎取我们想要的信息。那末认证后我们经由过程甚么路子拿到认证后前往的信息呢?人人看看下面JS把持ChildBrowser的代码。会发明内里有一个办法:- cb.onLocationChange=function(loc){console.warn(loc);};
复制代码 假如你在xCode下面跑这段代码的话,你会发明loc打出来的是每次ChildBrowser内里扫瞄的网页改动的地点。这个时分我们就能够因利乘便,依据这里供应的举措,用url的体例把地点前往到Phonegap卖力逻辑处置的JS代码中,同时将相干必要通信的信息也前往。前往后还能够经由过程回调的体例实行封闭ChildBrowser的代码:固然,你还能够实行更多异步哀求的代码。至于说还能够经由过程怎样的体例举行通信实在另有良多举措,我这里仅仅是供应一下思绪引诱和办法。详细的话,还要理论出真谛论,做到十分平安的通信还值得我们持续深切切磋。那末我要先容的也许就到这里为止。由于实践项目中我们另有pushnotification的机制,以是今后我应当还会联同@Jeff_Kithttp://www.jeffkit.info/完成一下Phonegap的推送计划,并收拾出sdk,成文后开放出来便利人人交换。
关于本文假如有甚么疑问大概倡议都能够间接向我反应,我的新浪微博是:http://weibo.com/lbj96347,我还常常分享一些代码片断在github下面(开源的精神未几,以是开源项目较少,但愿往后增添吧。)http://github.com/lbj96347接待您和我随时举行交换,也但愿Phonegap的中国开辟者社区会变得愈来愈出色。
注重:ChildBrowser控件在实践情况中由于平安成绩大概必要修正,通信过程当中参数也倡议加密。:-)
你可能还需要学习使用Xcode这个开发环境,接著你需要掏钱向苹果注册开发者权限,基本的帐号是99美金。本视频为“斯坦福大学iPhone开发教程”,51CTO将不断关注本视频教程的更新进度,为大家提供最新的视频。 |
|