如果用户曾经登录过,如何在android应用程序中向Facebook提供自动登录?

问题描述:

我在我的android应用程序中使用图形api来连接到facebook.Now我正在做的是为我的Facebook类创建一个实例,并且每次从主活动调用登录方法。如果用户使用应用程序登录一次,并且当用户打开应用程序下一次,就应该直接登录使用以前活跃的Facebook session..How做到这一点?Sombody请帮助...如果用户曾经登录过,如何在android应用程序中向Facebook提供自动登录?

登录按钮单击方法

public void onBtnClicked(View v){ 
      if(v.getId() == R.id.btnLogin) 
      { 

       FacebookClass na = new FacebookClass(this); 
       na.login(); 
      } 
} 

这是我的登录方法

public void login() 
{ 
    // start Facebook Login 
    Session.openActiveSession(mContext, true, new Session.StatusCallback() { 

     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      if (session.isOpened()) { 


         sessionState = true; 


       Toast.makeText(mContext, "Access token :" + session.getAccessToken() + "\n" +"Expires at "+session.getExpirationDate().toLocaleString(), Toast.LENGTH_LONG).show(); 

         Log.i("sessionToken", session.getAccessToken()); 
         Log.i("sessionTokenDueDate", session.getExpirationDate().toLocaleString()); 

        access_token =session.getAccessToken(); 

        pref = mContext.getPreferences(0); 
        edt = pref.edit(); 

         Editor prefsEditor = pref.edit(); 
         edt.putString("Access token", access_token); 
         edt.commit(); 

       /** 
       * getting user's name and location 
       */ 

       // make request to the /me API 
        Request.newMeRequest(session, new Request.GraphUserCallback() { 

        // callback after Graph API response with user object 
        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         if (user != null) 
         { 
           dispname = user.getName(); 
           id = user.getId(); 

           Object userLocation = user.getLocation(); 

           Log.i("Profile information", ""+response); 

          String strLocation = (userLocation != null)? ((GraphObject) userLocation).getProperty("name").toString() : "No location found"; 


           //location.setText("Lives in " + strLocation + "!"); 

           disploc = strLocation; 

           edt.putString("Username", dispname); 
           edt.putString("Location", disploc); 
           edt.commit(); 

          ((MainActivity)mContext).dispatchInformations(dispname,disploc); 


           } 
        } 
        }).executeAsync(); 



        /** 
        * Getting user's profile picture 
        */ 
        Bundle params = new Bundle(); 
        params.putBoolean("redirect", false); 
        params.putString("type", "normal"); 
        params.putString("height", "200"); 
        params.putString("width", "200"); 
        new Request(
          Session.getActiveSession(), 
          "/me/picture", 
          params, 
          HttpMethod.GET, 
          new Request.Callback() { 
           public void onCompleted(Response response) { 
            /* handle the result */ 
            Log.i("Profile pic", ""+response); 
            GraphObject graph=response.getGraphObject(); 
            JSONObject jsonObj=graph.getInnerJSONObject(); 
            JSONObject object; 
            String imageURL; 



            try { 
             object = jsonObj.getJSONObject("data"); 
              imageURL=object.getString("url"); 

              new DownloadImageTask().execute(imageURL); 


            } catch (JSONException e) { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
            } 

           } 
          } 
         ).executeAsync(); 

      } 





} 

    private boolean isSubsetOf(Collection<String> subset, 
      Collection<String> superset) { 
     for (String string : subset) { 
      if (!superset.contains(string)) { 
       return false; 
      } 
     } 
     return true; 

} 

}); 

} 
+0

在第一次登录,在sharedpref设置。然后检查您是否再次访问SharedPref值是否可用。如果是的话,执行登录Facebook的那个值.. – Riser 2014-12-04 07:26:34

您可以Session.getActiveSession();

检查例如使用这里面onCompleted()方法

Session facebooksession = Session.getActiveSession(); 
if(facebooksession != null) { 
//Second time login 
} 
else{ 
//First time login 
} 
+0

我得到空总是:(但其登录...如何解决这个问题?有什么与onActivityResult有关吗?请帮助 – Nevaeh 2014-12-05 08:27:59

+0

@Nevaeh您添加了我的代码'onCompleted()'方法内?如果用户第一次通过你的应用程序登录,那么它将为空,如果相同的用户登录到应用程序第二次,那么它不会为空 – 2014-12-05 09:25:31

+0

我会解释。我有一个类的Facebook登录和获取details.I在我的主要活动写了onActivityResult方法。问题的第一个代码片段是从我的主要活动,第二是从我的Facebook类.so,我的问题是,我想检查是否有任何活动会话时应用程序启动。如果是,那么我想要显示名称和图片自动在我的左menu.else,我想显示一个登录按钮。我希望你明白我tell.please回复 – Nevaeh 2014-12-05 09:42:52