2013-03-04 169 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上

相关问题