栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无法使用Facebook API获取位置和电子邮件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无法使用Facebook API获取位置和电子邮件

问题是您没有要求权限:

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");
,现在您应该能够检索用户的电子邮件



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号