2011-07-14 114 views
2

我試圖在android上創建一個facebook應用程序,我正在使用android facebook-sdk。 我想要了解的例子是這樣的一個: https://github.com/facebook/facebook-android-sdk/tree/master/examples/streamandroid facebook應用程序

有東西,我不明白這裏,如果ü可以幫助我一點點的將是巨大的。

在主Activity某一點做這樣的事情:

Dispatcher dispatcher = new Dispatcher(this); 
     dispatcher.addHandler("login", LoginHandler.class); 
     dispatcher.addHandler("stream", StreamHandler.class); 
     dispatcher.addHandler("logout", LogoutHandler.class); 


     Session session = Session.restore(this); 
     if (session != null) { 
      dispatcher.runHandler("stream"); 
     } else { 
      dispatcher.runHandler("login"); 
     } 
    } 

我不明白的是這Session.restore(this)的工作方式。

restore方法是這樣的:

public static Session restore(Context context) { 
     if (singleton != null) { 
      if (singleton.getFb().isSessionValid()) { 
       return singleton; 
      } else { 
       return null; 
      } 
     } 

     SharedPreferences prefs = 
      context.getSharedPreferences(KEY, Context.MODE_PRIVATE); 

     String appId = prefs.getString(APP_ID, null); 

     if (appId == null) { 
      return null; 
     } 

     Facebook fb = new Facebook(appId); 
     fb.setAccessToken(prefs.getString(TOKEN, null)); 
     fb.setAccessExpires(prefs.getLong(EXPIRES, 0)); 
     String uid = prefs.getString(UID, null); 
     String name = prefs.getString(NAME, null); 
     if (!fb.isSessionValid() || uid == null || name == null) { 
      return null; 
     } 

     Session session = new Session(fb, uid, name); 
     singleton = session; 
     return session; 
    } 

如果有人能解釋我是什麼SharedPreferences整個目的,什麼是儲存在那裏,爲什麼是這兩條線需要:

fb.setAccessToken(prefs.getString(TOKEN, null)); 
      fb.setAccessExpires(prefs.getLong(EXPIRES, 0)); 

回答

2

當您訪問任何facebook用戶信息或需要訪問permission的任何其他操作時,如下所示。 Image from facebook, facebook Authentication dialog。如果用戶按下Allow按鈕然後Token插在他們的數據庫與user Idyour App Idvalidation time(可能是無限的),以及在Actions你可以執行(e.g Access Info, Send Email, Access Posts, Post to Wall etc.),特定Token返回給你,你救即Token訪問信息和其他允許針對該標記的操作。 每當您對與該令牌匹配的任何操作發出請求時,請檢查驗證,然後查看用戶是否允許該操作,如果允許您授予該操作以完成該操作。

+0

因此,當我按下allow時,我還保存在SharedPreferences中,我將用於還原會話的TOKEN?還有誰是UID和NAME? – adrian

+0

當您按下允許您將該令牌保存到'SharedPreferences'以備將來使用時,每當您每次在任何'Activity'中創建一個'''對象'對象時,每次調用'restore()'方法都會確保該會話有效。 「UID」和「NAME」是用戶的Facebook ID和Facebook名稱。 –