Hello.js參考3

雜項

分頁功能,限制和下一頁

做爲所有結果的子集,響應必然會提供一個response.paging.next屬性。這個屬性能夠塞回hello.api,以取得結果的下一頁。javascript

在下面的示例中,函數paginationExample()調用了hello.api("me/frields")。後續的調用從resp.paging.next中取得path。html

javascriptfunction paginationExample(path) {
    hello('facebook')
        .api(path, {limit: 1})
        .then(
            function callback(resp) {
                if (resp.paging && resp.paging.next) {
                    if (confirm('Got friend ' + resp.data[0].name + '. Get another?')) {
                        // Call the API again but with the 'resp.paging.next` path
                        paginationExample(resp.paging.next);
                    }
                }
                else {
                    alert('Got friend ' + resp.data[0].name);
                }
            },
            function() {
                alert('Whoops!');
            }
        );
}

paginationExample('me/friends');

scope

scope屬性定義了應用須要從網絡提供者那邊取得哪些特權。經過hello.init(object,{scope:'string'}),scope能夠被定義爲會話全局性的,而hello('network').login({scope:'string'});只在觸發身份驗證時可用。java

每一個應用能夠指定多個scope,能夠用逗號隔開,以下所示:node

javascripthello('facebook').login({scope: 'friends,photos,publish'});

scope與API請求是緊密耦合的,當會話缺失,或者不可用時,它將斷開。git

下表描述了HelloJS曝露的默認scope。能夠添加額外的scope以增長專有服務。可是必須當心不要混用專用scope和你不知道如何使用的其餘服務。github

scope description
default 讀取基本我的信息
"friends" 讀取朋友的我的信息
"photos" 讀取用戶相冊以及圖片
"files" 讀取用戶文件
"publish" 發佈狀態更新
"publish_files" 發佈圖片和文件

把使用限制在一個scope裏是個良好的做法,並且還讓用戶意識到爲何你的應用程序須要某些特權。當用戶須要用你的應用的更多功能時,再嘗試更新受權。舉個例子,若是用戶想把一個連接分享給朋友,包括一個用戶必須點擊的按鈕,以觸發scope爲"feiends"的hello.login,而後在驗證身份以後處理器觸發API調用。數據庫

錯誤處理

hello.api([path]).then(null,[errorHandler])可以返回錯誤信息。或者使用hello.api([path],[handlesuccessOrError])windows

Promise響應標準化了error處理器的綁定。api

錯誤對象

一個失敗請求的errorHandler對象的第一個參數,多是boolean(false),也多是一個Error Object。promise

Error Object對象的結構:{code:string,message:string}。

  • code:Code,required
  • message:Error message,required

擴展服務

添加到HelloJS的服務是模塊化的。欲知更多關於建立你本身的模塊的信息和示例,請看Modules

OAuth代理

|方法|網站
|OAUTH2:隱式受權服務,不須要服務器端受權|windows、google、facebook、Instagram、soundcloud、foursquare|
|OAUTH2:顯式受權服務,服務必需oauth_proxy|windows、google、facebook、Instagram、linkedin、soundcloud、foursquare、github|
3.OAUTH1 & 1A:服務必需oauth_proxy|dropbox、twitter、yahoo、fickr|

對於只支持OAuth1或者OAuth2顯式受權的服務提供者,身份驗證流必須用一個密鑰才能登入,這個密鑰可能不會曝露在瀏覽器中。HelloJS用oauth_proxy定義了一箇中間媒介,經過這個Web服務,HelloJS規避了這個問題。必須向這項服務提供一個anaccess_token,這項服務從數據庫查找密鑰並執行握手。若是是用OAuth1,網站服務器還登入了後續的API請求。

快速起步:在OAuth代理服務器上註冊你的ClientID以及密鑰。

這個默認的代理服務是https://auth-server.herokuapp.com/。開發員能夠把他們本身ClientID以及密鑰添加到服務器上,從而啓動並運行。

另外一種辦法是用node-oauth-shim從新建立這個服務,而後在HelloJS客戶端腳本hello.init中中覆蓋默認的oauth_proxy,以下所示:

javascripthello.init(
    CLIENT_IDS,
    {
        oauth_proxy: 'https://auth-server.herokuapp.com/proxy'
    }
)

Promises A+

異步方法hello.loginhello.logout以及hello.api的響應返回了一個可延遲的方法,就是Promise A+兼容。

若是你把庫綁定在「src/*」文件裏,請看這個promises-demo以瞭解更多。

瀏覽器支持

HelloJS瞄準全部的現代瀏覽器。

填充物包含在「scr/hello.polyfill.js」中,它提供了舊瀏覽器兼容功能。若是你使用了放在「dist/」目錄下所源碼,它已經綁定好了。可是若是你是從源碼開始構建的,你可能喜歡先定義是否必需要用於填充物,或者你已經支持了它們。

PhoneGap支持

HelloJS同時還能夠支持在PhoneGap應用上。請看這個hellojs-phonegap-demo以瞭解更多。

Hello.then

函數hello.apihello.login以及hello.logout返回一個Promise/A+ 1.1.1兼容的then方法。

示例:Hello.api().then()

這個示例演示瞭如何在調用hello.loginhello.api時使用Promise對象以操做響應。

javascriptfunction login(network){
    // Make a login call and handle the response using promises
    hello.login(network).then(function(){
        console.log('fullfilled', 'making api call');
        // Reurn another promise to get the users profile.
        return  hello( network ).api( 'me' );
    }).then(function(p){
        // Print it to console.
        console.log('hello.api(me) was fullfilled', p);
        return p;
    }).then(function(p){
        // Insert it into thumbnail
        document.getElementById(network).innerHTML = "<img src='"+ p.thumbnail + "' width=24/>Connected to "+ network+" as " + p.name;
    }).then(null, function(e){
        // Uh oh
        console.error(e);
    });
}

示例:Promise.all

得到google好友以及聯繫人

javascriptfunction friendsAndContacts(network){
    // Make a login call and handle the response using promises
    hello(network).login({scope:'friends'}).then(function(){
        console.log('fullfilled', 'making api call');
        // Reurn another promise to get the users profile.
        return Promise.all([
            hello( network ).api( 'me/friends' ),
            hello( network ).api( 'me/contacts' )
        ]);
    }).then(function(all){

        // Build a list of friends
        var a = [];
        for(var i=0;i<all.length;i++){
            for(var j=0;j<all[i].data.length;j++){
                a.push(all[i].data[j].name);
            }
        }
        document.getElementById('friends').innerHTML = a.join(',');

    }, function(e){
        // Uh oh
        console.error(e);
    });
}

初始化應用

javascripthello.init( {
    google : CLIENT_IDS.google
},
{
    redirect_uri : '../redirect.html'
});

hellojs.phonegap

相關文章
相關標籤/搜索