2

私はアンドロイド開発に不慣れで、ここSOでも初めてです。私の質問は: Facebook ログインを実装するボタン (Facebook LogginButton ではない) があります。ログイン後、ユーザーのメールを取得する必要もあります。しかし、私が実装した方法では、ユーザーのメールを取得できないことがあります。アプリを初めて使用する場合は、アプリのログイン ボタンを数回 (少なくとも 2 回) クリックする必要があるため、最終的にメールが届き、初めてメールを受け取った後は常にメールが表示されます。次回ログインボタンをクリックしたときにメールが届きます。しかし、fbアカウントにアクセスしてアプリを削除すると、問題が再び発生します。権限の設定またはセッションの管理に問題があると思います。以下にコードを投稿します。

    public void onClickLoginFacebook(View view) {
Session.StatusCallback statusCallBack =  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 request = 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) {
                        if (user.asMap().get("email")!=null){
                        userFacebook.setEmail(user.asMap().get("email").toString());
                     }


                }else{
                        Toast.makeText(getApplicationContext(), "Error on facebook login: " + response.getError().getErrorMessage(), Toast.LENGTH_LONG).show();
                    }

            }

            });
          }else if(session.isClosed()){
              Toast.makeText(getApplicationContext(), "Error on facebook login", Toast.LENGTH_LONG).show();
          }

}
    };

    if( isOnline() )
    {

        Session session = Session.getActiveSession();
        if(session == null){
            session = new Session.Builder(this).setApplicationId(
                            this.getString(R.string.app_id)).build();
                           Session.setActiveSession(session);
        }
            if (!session.isOpened() && !session.isClosed()) {
                    session.openForRead(new Session.OpenRequest(this)
                        .setPermissions(Arrays.asList("email"))
                        .setCallback(statusCallBack));
            } else {
                    Session.openActiveSession(LoginActivity.this, true, statusCallBack);
            }

    }
    else
    {
            Toast.makeText(getApplicationContext(), R.string.error_message, Toast.LENGTH_LONG).show();
    }
  }


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

誰でも私を助けてもらえますか?PS .: 下手な英語でごめんなさい =/

4

1 に答える 1

0

呼び出す前にSession.openActiveSession()、これを実行してアクセス許可を取得します。これを追加します。

List<String> permissions = new ArrayList<String>();
permissions.add("email");

の最後のパラメーターはSession.openActiveSession()アクセス許可である必要があります。にアクセスできるようになりuser.getProperty("email").toString()ました。

于 2014-03-21T13:07:09.653 に答える