1

我已經在我的應用程序中實施了Facebook SDK,但我沒有得到用戶電子郵件(我想我需要設置獲取用戶電子郵件的權限 - 根據),但不知何故,它不適合我。我應該如何改進我的代碼才能完成它?Android Facebook SDK 3.0問題,同時獲取用戶電子郵件

這是我的代碼。

LoginScreen.java

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import com.facebook.*; 
import com.facebook.Session.OpenRequest; 
import com.facebook.model.*; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

public class LoginScreen extends Activity{ 
    public static final String[] PERMISSIONS = new String[] {"email"}; 

    public String fbId,first_name,last_name,email; 

    private Button button_fb; 

    JSONObject result; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.loginhome); 

     button_fb = (Button) findViewById(R.id.btn_signin_fb); 

     button_fb.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
       // start Facebook Login 

       Session.openActiveSession(LoginScreen.this, true, new Session.StatusCallback() { 
        // session.openForRead(new OpenRequest(LoginScreen.this).setPermissions(Arrays.asList("email"))); 
        // Callback when session changes state 

        @Override 
        public void call(final 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 user, Response response) { 
            GraphObject graphObject = response.getGraphObject(); 
            Log.d("graphboject",""+graphObject); 

            if (user != null) { 
             Toast.makeText(getApplicationContext(), user.getName(), Toast.LENGTH_SHORT).show(); 

             fbId = user.getId(); 
             first_name = user.getFirstName(); 
             last_name = user.getLastName(); 
             result = user.getInnerJSONObject(); 
             email = (String) user.getProperty("email"); 
             String emal = (String) response.getGraphObject().getProperty("email"); 
             // String em = (String) user.asMap().get("email"); 
             Log.d("user email", 
              (String) user.getProperty("email") + "link" 
              + user.getLink()); 

             Log.d("Fb fb_id", fbId); 
             Log.d("Fb first name", first_name); 
             Log.d("Fb last name", last_name); 
             Log.d("FB email", emal); 
             Log.d("Fb json", String.valueOf(result)); 

             // Log.d("Fb email", email); 
            } 
           } 
          }); 
         } 
        } 
       }); 
      } 
     }); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 
} 

我檢查我的控制檯上。我得到了一切,如用戶名,名字,姓氏,fb_id,但我沒有收到用戶的電子郵件。

我應該怎麼做?

我應該如何使用session.openForRead(new OpenRequest(LoginScreen.this).setPermissions(Arrays.asList("email")));?在我的代碼中,我搜索了很多並查看了很多答案,但我仍然對如何在代碼中實現它感到困惑。

+0

同樣的問題我也有問題,但沒有人回答我。 http://stackoverflow.com/questions/16332283/set-permission-for-getting-users-email-id-from-facebook-login – Anupam 2013-05-02 09:30:44

+0

我有這個鏈接。這可能會幫助你。我也會嘗試這樣的事情。 http://adilatwork.blogspot.co.uk/2013/02/facebook-android-sdk-30-requesting.html – Anupam 2013-05-02 09:41:01

+0

@Anupam感謝您分享鏈接..我也會試試 – iOSBee 2013-05-02 09:58:20

回答

3

您還需要在developers.facebook.com上設置'email'權限。

應用>定義>權限>用戶&好友權限>(寫)「電子郵件」

+0

@dwbrito它還沒有工作.... – iOSBee 2013-05-03 05:12:07

4

以下工作對我來說就像一個魅力。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mLogin = (Button) findViewById(R.id.logIn); 
    mLogin.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    Session currentSession = Session.getActiveSession(); 
    if (currentSession == null || currentSession.getState().isClosed()) { 
     Session session = new Session.Builder(context).build(); 
     Session.setActiveSession(session); 
     currentSession = session; 
    } 

    if (currentSession.isOpened()) { 
     // Do whatever you want. The user is logged in. 

    } 
    else 
     if (!currentSession.isOpened()) { 
      // Ask for username and password 
      OpenRequest op = new Session.OpenRequest((Activity) context); 

      op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO); 
      op.setCallback(null); 

      List<String> permissions = new ArrayList<String>(); 
      permissions.add("publish_stream"); 
      permissions.add("user_likes"); 
      permissions.add("email"); 
      permissions.add("user_birthday"); 
      op.setPermissions(permissions); 

      Session session = new Builder(MainActivity.this).build(); 
      Session.setActiveSession(session); 
      session.openForPublish(op); 
     } 
} 

public void call(Session session, SessionState state, Exception exception) { 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (Session.getActiveSession() != null) 
     Session.getActiveSession().onActivityResult(this, requestCode, 
                resultCode, data); 

    Session currentSession = Session.getActiveSession(); 
    if (currentSession == null || currentSession.getState().isClosed()) { 
     Session session = new Session.Builder(context).build(); 
     Session.setActiveSession(session); 
     currentSession = session; 
    } 

    if (currentSession.isOpened()) { 
     Session.openActiveSession(this, true, new Session.StatusCallback() { 

      @Override 
      public void call(final Session session, SessionState state, 
          Exception exception) { 

       if (session.isOpened()) { 
        Request.executeMeRequestAsync(
         session, 
         new Request.GraphUserCallback() { 

          @Override 
          public void onCompleted(GraphUser user, 
            Response response) { 
           if (user != null) { 
            TextView welcome = (TextView) findViewById(R.id.welcome); 
            welcome.setText("Hello " 
              + user.getName() + "!"); 

            access_token = session 
              .getAccessToken(); 
            firstName = user.getFirstName(); 
            fb_user_id = user.getId(); 

            System.out 
              .println("Facebook Access token: " 
                + access_token); 
            System.out.println("First Name:" 
              + firstName); 
            System.out.println("FB USER ID: " 
              + fb_user_id); 
           } 
          } 
         }); 
       } 
      } 
     }); 
    } 
} 
+0

謝謝你的代碼。我一直在尋找幾個小時來完成這項工作,而這完全是。做得好。 – 2013-05-26 21:49:59

+0

很好,謝謝! – TharakaNirmana 2014-01-29 03:42:37

+0

此代碼ID不適用於我。可以幫助任何人。 – 2015-01-31 12:46:57