Facebook SDKから電話番号を取得するために検索しましたが、それは不可能であることを知りました。 私の質問は、私はGoogle SDKからユーザーの電話番号を取得する方法はありますか?Androidアプリでユーザーの電話番号を取得する方法は?
どうすれば入手できますかユーザーの情報は?
Facebook SDKから電話番号を取得するために検索しましたが、それは不可能であることを知りました。 私の質問は、私はGoogle SDKからユーザーの電話番号を取得する方法はありますか?Androidアプリでユーザーの電話番号を取得する方法は?
どうすれば入手できますかユーザーの情報は?
Android用 'Facebook'アプリは、Androidアカウントマネージャーにアカウントを作成します。自分の電話番号を入力して(FBアプリに)ログインしたユーザーの場合は、アカウント登録された電話番号をアカウント名として取得できます。
Android上でのFacebookアプリケーションにログインするために使用>1)電子メールのID -
移動すること> Accounts-> Facebookのここ
を[設定するには、次の3のどちらかが表示されます
2)AndroidのFacebookアプリケーションへのログインに使用される電話番号
3)ユーザーID - 各ユーザーの一意のID。たとえばMark ZuckerbergのIDは「zuck」(https://www.facebook.com/zuck)です。
ここで、「連絡先」の許可を受け入れるようにユーザーを誘導する方法があります。 「連絡先」権限(マニフェストにも「アカウント」権限を追加することを忘れないでください)を取得したら、android.accounts.AccountManagerクラスを使用して、すべてのアカウントデータ(Facebookを含む)にアクセスできます。
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
for (Account ac : accounts) {
String accountType = ac.type;
if (accountType.equals("com.facebook.auth.login")) {
String usrDataStr = accountType + "-->" + ac.name;
Toast.makeText(this, usrDataStr, Toast.LENGTH_LONG).show();
}
}
上記のコードを使用して、アンドロイドデバイスのアカウントを繰り返すことができます。上記のコードは、基本的にFacebookアカウントがデバイスに存在し、関連するデータを取得するかどうかをチェックします。
少しの調査の後、私はFacebookがログインページに電話番号を入力した場合、ユーザーの電話番号をアカウント名として設定することに気付きました。ただし、電子メールまたはユーザーIDを使用する場合は、アカウント名として設定されます。
私の経験から、大多数の人が自分の電話番号を使用してログインする傾向があることに気付きました。したがって、この技術を使用してユーザーの電話番号を取得する可能性が高くなります。
この方法は、ユーザーの連絡先情報を取得するための不正な方法(電話番号の取得が必須ではない場合)のアプリを開発する場合に適しています。これはユーザーの電話番号を取得するための保証された方法ではなく、セキュリティ上の欠陥である可能性があることを認識すると、Facebookはこのようなユーザー情報の公開をやめる可能性があります。また、その番号は別のデバイスに属することもあります。
私はFacebookにこの問題を報告しましたが、セキュリティチームから「これは予想される動作であり、アプリケーション間の通信/機密情報ではない」との回答がありました。
でサンプルコードをチェックアウト:あなたはユーザの位置を取ることによって、ユーザのアドレスを取得することができます...質問の第二の部分についてはhttps://github.com/umangmathur92/FacebookVulnerabilityProof
では、Googleの「FusedLocationApi」を使用して座標サービスを再生し、位置情報要求の結果、すなわち地理座標を使用して、 'Geocoder'クラスを使用して可能なアドレスのリストを取得します。
1)あなたのonCreate/onCreateView機能インサイド:
GoogleApiClient mGoogleApiClient = return new GoogleApiClient.Builder(getContext())
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
})
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
LocationRequest mLocationRequest = new LocationRequest();
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
LocationSettingsRequest mLocationSettingsRequest = builder.build();
PendingResult<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, mLocationSettingsRequest);
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
Log.i(MY_LOG, "All location settings are satisfied.");
getLocation();
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
Log.i(MY_LOG, "Location settings are not satisfied. Show the user a dialog to upgrade location settings ");
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
Log.i(MY_LOG, "Location settings are inadequate, and cannot be fixed here. Dialog not created.");
break;
}
}
});
2) 'のgetLocation' 関数:
private void getLocation() {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
userProfile.setLatitude(mLastLocation.getLatitude());
userProfile.setLongitude(mLastLocation.getLongitude());
AsyncTask<Location, String, List<Address>> reverseGeoCodeTask = getReverseGeoCodeAsyncTask();
reverseGeoCodeTask.execute(mLastLocation);
}
}
3)リバースジオコーディングAsyncTask:
private AsyncTask<Location, String, List<Address>> getReverseGeoCodeAsyncTask() {
return new AsyncTask<Location, String, List<Address>>() {
@Override
protected List<Address> doInBackground(Location... locations) {
Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault());
try {
return geocoder.getFromLocation(locations[0].getLatitude(), locations[0].getLongitude(), 1);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(List<Address> addresses) {
super.onPostExecute(addresses);
if (Utils.notNullOrEmpty(addresses)) {
Address address = addresses.get(0);
address.getPostalCode();
address.getLocality();
address.getAdminArea();
}
}
};
}
注意:私は許可チェック、簡潔さのためのエラー処理を含むコードの特定の部分をスキップしました。
メールや電話番号の代わりに、これを解決しましたか? :( https://k50.kn3.net/E74B28C18.png – karique