问题是您没有要求权限:
authButton.setReadPermissions(Arrays.asList("user_likes", "user_status","email","user_birthday"));但是,您使用的是较旧的Facebook
SDK,而最新的SDK是4.0。+。下面,我将基于最新的API为您提供Facebook登录的完整示例代码。请记住,
developers.facebook如文档所述,您首先必须添加您的应用程序。
public class LoginActivity extends ActionBarActivity{@Overrideprotected void onActivityResult(int requestCode, int responseCode, Intent data){ super.onActivityResult(requestCode, responseCode, data); callbackManager.onActivityResult(requestCode, responseCode, data);}@Overrideprotected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); setContentView(R.layout.activity_login); callbackManager = CallbackManager.Factory.create(); loginButton = (LoginButton) findViewById(R.id.loginFaceBook_button); List<String> permissionNeeds = Arrays.asList("user_photos", "email", "user_birthday", "public_profile"); loginButton.setReadPermissions(permissionNeeds); loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { System.out.println("onSuccess"); GraphRequest request = GraphRequest.newMeRequest (loginResult.getAccessToken(), new GraphRequest.GraphJSonObjectCallback() { @Override public void onCompleted(JSonObject object, GraphResponse response) { // Application pre Log.v("LoginActivity", response.toString()); //System.out.println("Check: " + response.toString()); try { String id = object.getString("id"); String name = object.getString("name"); String email = object.getString("email"); String gender = object.getString("gender"); String birthday = object.getString("birthday"); System.out.println(id + ", " + name + ", " + email + ", " + gender + ", " + birthday); } catch (JSonException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender, birthday"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { System.out.println("onCancel"); } @Override public void onError(FacebookException exception) { System.out.println("onError"); Log.v("LoginActivity", exception.getCause().toString()); } }); }}如果要使用
Fragment而不是
ActionBarActivity,只需
loginButton.setFragment(this);在权限行之后添加即可。
manifest.xml:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><application <!-- your other attrs..--> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> <!-- Get this one from developers.facebook --> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name"/>
您还将需要向您的应用程序添加一个 哈希键 。这是使用代码执行此操作的方法:
try{ //paste Your package name at the first parameter PackageInfo info = getPackageManager().getPackageInfo("PUT_YOUR_PACKAGE_NAME_HERE", PackageManager.GET_SIGNATURES); for (android.content.pm.Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); String sign = base64.enpreToString(md.digest(), base64.DEFAULT); Log.e("MY KEY HASH:", sign); Toast.makeText(getApplicationContext(),sign, Toast.LENGTH_LONG).show(); }}catch (PackageManager.NameNotFoundException e){}catch (NoSuchAlgorithmException e){}在将您的哈希键打印出来之后,您可以将其复制粘贴到您
facebook.developer的项目所在的帐户中。
在grandle,你应该添加
jcenter的
repositories,也可以添加
compile'com.facebook.android:facebook-android-sdk:4.0.0'在
dependecies。
buildscript {repositories { jcenter()}dependencies { classpath 'com.android.tools.build:gradle:1.1.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files}}allprojects {repositories { jcenter() }}还有另一个文件:
apply plugin: 'com.android.application'android {compileSdkVersion 21buildToolsVersion "21.1.2"defaultConfig { applicationId "YOUR_PACKAGE_NAME" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0"}buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }}}dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:21.0.3'compile 'com.facebook.android:facebook-android-sdk:4.0.0'}编辑:
为了跟踪用户的位置,您将需要GPS跟踪器,类似这样。
"user_location"权限不会返回
lon,lat,而是返回Page对象,我认为这不是您想要的。因此,您的权限应该是
List<String>permissionNeeds=Arrays.asList("user_photos", "email", "user_birthday","public_profile");,现在您应该能够检索用户的电子邮件


