2017-08-31 24 views
1

怎麼能尤伯杯Android應用得到我的手機號碼,而Facebook登錄如何Uber應用從Facebook獲得的手機號碼在Android的

我使用Facebook登錄在我的Android應用程序,我想從Facebook用戶的手機號碼,但我不得到它下面是我的Android代碼

private void FbInitialise() { 

    loginButton = (LoginButton) findViewById(R.id.fb_login); 
    callbackManager = CallbackManager.Factory.create(); 
    loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_friends")); 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      graphRequest(loginResult.getAccessToken()); 

     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      graphRequest(loginResult.getAccessToken()); 
     } 

     @Override 
     public void onCancel() { 

     } 

     @Override 
     public void onError(FacebookException error) { 

     } 
    }); 
} 

    public void graphRequest(AccessToken token) { 
    GraphRequest request = GraphRequest.newMeRequest(token, new GraphRequest.GraphJSONObjectCallback() { 

     @Override 
     public void onCompleted(JSONObject object, GraphResponse response) { 

      try { 
       LoginType="FB"; 
       String firstName = ""; 
       String lastName = ""; 
       String stremail = ""; 
       String strmobile = ""; 

       if (object.has("first_name")) { 
        firstName = object.getString("first_name"); 
       } 
       if (object.has("last_name")) { 
        lastName = object.getString("last_name"); 
       }if (object.has("email")) { 
        stremail = object.getString("email"); 
       } 

       Intent intent=new Intent(SelectSocilaLoginActivity.this,ConfirmInfoActivity.class); 
       intent.putExtra("firstName",firstName); 
       intent.putExtra("lastName",lastName); 
       intent.putExtra("email",stremail); 
       intent.putExtra("parent","SocialLogin"); 
       startActivity(intent); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

    }); 

    Bundle b = new Bundle(); 
    b.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); 
    request.setParameters(b); 
    request.executeAsync(); 

} 

請給我妥善解決

+0

你必須先通過Facebook的批准 – phpdroid

+0

如何獲得facebook的批准 – Deepak

回答

-1

這是我如何成功地提取從登錄用戶的個人資料的手機號碼:

public class UserAuth extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener { 
private Context context; 
private Button btnViewProfile; 

//For User data 
private String userId, userFirstName, userMiddleName, userLastName, userProfileImage, userEmail, userGender, userMobile, userBirthdate; 

//For Facebook 
private CallbackManager callbackManager; 
LoginButton loginButton = null; 
private ImageButton btnFacebook; 
private AccessTokenTracker accessTokenTracker; 
private ProfileTracker profileTracker; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    /* Enabling strict mode */ 
    setStrictThreadMode(); 

    //initializing facebook sdk 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    //Initialize your view components available in the layout 

    accessTokenTracker = new AccessTokenTracker() { 
     @Override 
     protected void onCurrentAccessTokenChanged(AccessToken oldToken, 
                AccessToken newToken) { 
     } 
    }; 

    profileTracker = new ProfileTracker() { 
     @Override 
     protected void onCurrentProfileChanged(Profile oldProfile, 
               Profile newProfile) { 
      if (newProfile != null) { 
       userId = newProfile.getId(); 
       userFirstName = newProfile.getFirstName(); 
       userMiddleName = newProfile.getMiddleName(); 
       userLastName = newProfile.getLastName(); 
       userProfileImage = newProfile.getProfilePictureUri(400, 400).toString(); 
      } 
     } 
    }; 

    accessTokenTracker.startTracking(); 
    profileTracker.startTracking(); 
} 

//To enable single thread at a time mode 
private void setStrictThreadMode() { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
} 

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

protected void onStop() { 
    super.onStop(); 
    accessTokenTracker.stopTracking(); 
    profileTracker.stopTracking(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    Profile profile = Profile.getCurrentProfile(); 
} 

//This method initializes the facebook login button, sets the required permissions and changes its default background to our drawable 
//It also registers the callback for the Login button 
private void registerLoginButton() { 
    List<String> mPermissions = new ArrayList<>(); 
    mPermissions.add("public_profile"); 
    mPermissions.add("email"); 
    mPermissions.add("user_birthday"); 
    mPermissions.add("user_friends"); 
    mPermissions.add("user_mobile_phone"); 

    loginButton.setReadPermissions(mPermissions); 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 

     @Override 
     public void onSuccess(LoginResult result) { 

      GraphRequest request = GraphRequest.newMeRequest(result.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 

       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 
        try { 
         userEmail = object.optString("email"); 
         userGender = object.optString("gender"); 
         userMobile = object.optString("mobile_phone"); 
         String userBirthdate = object.optString("birthday"); 
         logoutCurrentUser(); 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,email,gender,birthday"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
     } 

     @Override 
     public void onError(FacebookException error) { 
     } 
    }); 
} 

//This method is to end the current users session 
private void logoutCurrentUser() { 
    LoginManager.getInstance().logOut(); 
} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 
} 

}

我們可觀測添加權限獲取移動號碼:mPermissions.add( 「user_mobile_phone」);

此外,請記住,如果用戶將其公開,您將只能獲得手機號碼。

希望這對你有用。

+0

我試過你的方法,但仍然無法獲得電話號碼。我讀了一些關於白名單的內容,這樣facebook就可以讓你得到號碼,你知道關於它的一些事嗎? – karique

+0

@karique我已經非常清楚地提到,只有當相應的用戶將他們的手機號碼公開爲公衆時,纔會提取號碼。也請具體說明您已閱讀的關於白名單的內容以及您需要從中得到什麼?要了解更多關於獲得白色上市你有沒有閱讀Facebook社區論壇? –

+0

@karique你可以檢查這個知道白名單的含義。 https://stackoverflow.com/questions/15994546/facebook-app-whitelist-process –

相關問題