-1

FacebookのAndroidアプリを作成していますが、私が遭遇する問題の1つはユーザーのメールアドレスを取得することです。 1つを除くすべてのFacebookアカウントでは、電子メールアドレスが例外をスローしています。ここに私のコードは次のとおりです。メールアドレスを取得するときにFacebookがJSONExceptionをスローする

loginButton = (LoginButton) findViewById(R.id.login_button); 
    callbackManager = CallbackManager.Factory.create(); 

    loginButton.registerCallback(callbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        String accessToken = 
        loginResult.getAccessToken().getToken(); 
        Log.i("accessToken", accessToken); 

        GraphRequest request = GraphRequest.newMeRequest 
          (loginResult.getAccessToken(), new 
          GraphRequest.GraphJSONObjectCallback() 
          { 
           @Override 
           public void onCompleted(JSONObject object, 
            GraphResponse response) 
           { 
            SharedPreferences.Editor editor = 
             sharedPref.edit(); 
            try 
            { 

             editor.putString("user_ID", 
              object.getString("id")); 
             user_ID = object.getString("id"); 
             editor.putString("user_name." + 
              user_ID, object.isNull("name") ? 
              "" : object.getString("name")); 
             editor.putString("email_addr." + 
              user_ID, object.isNull("email") ? 
              "" : object.getString("email")); 
             editor.commit(); 
            } 
            catch (Exception e) 
            { 
             Toast.makeText(LaunchPage.this, getString(R.string.login_error) + e.getMessage(), Toast.LENGTH_LONG).show(); 
             e.printStackTrace(); 
            } 

           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id, name, email, gender, birthday, timezone, picture, locale, age_range"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

私はこの問題に数日費やしてきたと私は私が掲載いくつかの他のソリューションで提案されたものをやっていると思うが、私のコードはまだ失敗します。私は失敗したFacebookのアカウントで私の電子メールアドレスを公開しようとしましたが、それは助けになりませんでした。

+1

エラーログを質問に含めないでください。 – Denny

+0

'loginButton'で' setReadPermissions'をしましたか? – rafsanahmad007

+0

@Dennyエラーログがこの問題に関連していたと思いますか?私は愚か者が私の質問に投票したのは不思議です。 – FractalBob

答えて

1

は、このコードを試してみてください。

はまた、あなたのEmailがあなたのFbのアカウントで公開されていることを確認してくださいあなたのLoginButton

loginButton = (LoginButton) findViewById(R.id.login_button); 
loginButton.setReadPermissions(Arrays.asList(
      "public_profile", "email", "user_birthday", "user_friends")); 

setReadPermissionsを追加します。それ以外の場合はGraph apiは返されません。

+0

私の元の投稿で言及したように、電子メールアドレスを公開することは効果がありませんでした。いずれにしても、電子メールアドレスを公開する必要がある場合、多くのアプリユーザーはいません。 – FractalBob

0

電子メールアドレスが返されているアカウントが私自身であり、私が開発者であるという事実と関連していた可能性があります。だから私は自分のFacebookデベロッパーコンソールをチェックし、テスターを特定できるセクション、ロールを発見しました。だから私はFB IDとテスト用のIDをいくつか追加して、自分のメールアドレスを取得することができました。人生は再び良いです。

関連する問題