アプリケーションに Facebook SDK を実装しましたが、ユーザーのメールを取得していません ( Fetch User Dataによると、ユーザーのメールを取得する権限を設定する必要があると思います) が、どういうわけかうまくいきません。コードを改善するにはどうすればよいですか?
これが私のコードです。
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);
}
}
コンソールで確認しました。ユーザー名、first_name、last_name、fb_id などのすべてを取得していますが、ユーザーの電子メールを取得していません。
どうすればいいですか?
どのように使用すればよいsession.openForRead(new OpenRequest(LoginScreen.this).setPermissions(Arrays.asList("email")));
ですか? 私のコードでは、多くの検索を行い、多くの回答を表示しましたが、コードに実装する方法についてはまだ混乱しています。