2013-03-04 49 views
1

我在我的應用程序中使用Facebook sdk 3。我想獲取一些用戶信息以用於我的應用程序。如果我在我的設備中安裝了Facebook應用程序,它工作良好。它要求登錄,如果它沒有登錄並運行。但是,即使設備上未安裝Facebook應用程序,我也希望我的應用程序能夠正常工作。我該怎麼做。我的代碼如下。請幫助android:facebook登錄使用facebook sdk 3沒有安裝facebook應用程序

Session.openActiveSession(this, true, new Session.StatusCallback() { 

     // callback when session changes state 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      if (session.isOpened()) { 
       // make request to the /me API 
       Request.executeMeRequestAsync(session, 
         new Request.GraphUserCallback() { 

          // callback after Graph API response with user 
          // object 
          @Override 
          public void onCompleted(GraphUser graphuser, 
            Response response) { 
           L 
           if (graphuser != null) { 
            GraphObject graphObject = response 
              .getGraphObject(); 
            Log.i(" facebookLogin Email is ", 
              "value" 
                + graphObject 
                  .getProperty("email")); 
            User user = getUserDetails(graphObject, 
              graphuser.getId()); 
            sendFBCredentialsToServer(user); 
            updateSharedPrefsWithFacebookCredentials(user); 

           } 
          } 

         }); 
       Toast.makeText(getApplicationContext(), 
         "Pls wait , Fetching data", Toast.LENGTH_LONG) 
         .show(); 
      } 
     } 
    }); 

回答

0

在main.xml中加入Facebook的LoginButton現在

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<com.facebook.widget.LoginButton 
    android:id="@+id/loginButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Login With Facebook" /> 

</LinearLayout> 

,每當你如果網頁流量

的onCreate安裝,否則開放的Facebook登錄頁面在Facebook上點擊loginbutton它打開Facebook應用程序

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

    LoginButton authButton = (LoginButton) view.findViewById(R.id.loginButton); 
    authButton.setReadPermissions(Arrays.asList("email","user_about_me")); 

} 

onSessionStateChange

private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
      if(session.isOpen()) 
        getUserData(); 

} 
public void getUserData() 
{ 
Request.executeMeRequestAsync(Session.getActiveSession(), 
           new GraphUserCallback() { 

     @Override 
     public void onCompleted(GraphUser user, Response response) { 

      Log.d("FNAME", user.getFirstName()); 
      Log.d("LNAME", user.getLastName()); 
      Log.d("GENDER",user.getProperty("gender").toString()); 
      Log.d("EMAIL_ID",user.getProperty("email").toString()); 
      Log.d("FACEBOOK_ID",user.getId()); 
      }     
    }); 
} 
+0

我想在登錄後不久打電話給getUserData上的應用程序設置此鍵..我怎樣才能知道在代碼登錄完成。即我的邏輯是按下按鈕:登錄,如果沒有登錄和取數據 – png 2013-03-04 13:12:00

+0

謝謝。我做了類似的改變,但我看到onSessionStateChange永遠不會被調用。 – png 2013-03-04 13:56:41

1
// Add code to print out the key hash 


try { 
PackageInfo info = getPackageManager().getPackageInfo(
     "com.your.packagename", 
     PackageManager.GET_SIGNATURES); 
for (Signature signature : info.signatures) { 
    MessageDigest md = MessageDigest.getInstance("SHA"); 
    md.update(signature.toByteArray()); 
    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));// g 
    } 
} catch (NameNotFoundException e) { 

} catch (NoSuchAlgorithmException e) { 

} 

上的onCreate添加以下代碼,並獲得來自Facebook的哈希鍵並放回在Facebook上

相關問題