Facebook的SDK 3.7的Andr​​oid请求电子邮件的权限 [英] Facebook SDK 3.7 for Android request email permission

查看:94
本文介绍了Facebook的SDK 3.7的Andr​​oid请求电子邮件的权限的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Facebook的SDK为Android允许用户注册和使用的应用程序。我想获得有关用户喜欢的用户名和电子邮件的一些基本信息。无论如何,我有问题,因为我得到试图获取用户的电子邮件时,空指针异常。

 字符串email = user.getProperty(电子邮件)的toString()。
 

我假设我得到这个错误,因为我并没有要求对电子邮件的权限。我该怎么办呢?

下面是在全code

 公共类RegisterActivity扩展ActionBarActivity {

按钮btnFacebook;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_register);

    getSupportActionBar()隐藏()。

    btnFacebook =(按钮)findViewById(R.id.btn_facebook);


    btnFacebook.setOnClickListener(新OnClickListener(){

        @覆盖
        公共无效的onClick(查看为arg0){
            Log.d(脸谱,Prije sesije);
            //开始的Facebook登录
                        Session.openActiveSession(RegisterActivity.this,真,新Session.StatusCallback(){
                            //回调时,会话状态变化
                            @燮pressWarnings(德precation)
                            @覆盖
                            公共无效呼叫(会话的会话,SessionState会的状态,
                                    例外的例外){
                                Log.d(脸谱,U称之为);
                                如果(session.isOpened()){

                                    Log.d(脸谱,AKO济sesija otvorena);

                                    //使请求/ ME API
                                    Request.executeMeRequestAsync(会话,新Request.GraphUserCallback(){

                                        @覆盖
                                        公共无效onCompleted(GraphUser用户,响应响应){
                                            Log.d(脸谱,onCompleted);

                                            如果(用户!= NULL){
                                                Log.d(脸谱,用户razlicit外径为空);
                                                 字符串email = user.getProperty(电子邮件)的toString()。
                                                Toast.makeText(getApplicationContext(),输入法+ user.getUsername()。的toString()+电子邮件+电子邮件,
                                                        Toast.LENGTH_SHORT).show();

                                                字符串userid = user.getId();


                                                //新DownloadImageTask(ivProfile).execute(http://graph.facebook.com/+用户id +?/图像类型=大);



                                                Log.d(ID,用户id);



                                            }
                                            Log.d(ID,user.getId());


                                        }
                                    });
                                }
                                Log.d(脸谱,nijeüsesisji);


                            }

                        });

        }
    });

}

 @覆盖
  公共无效onActivityResult(INT申请code,INT结果code,意图数据){
      super.onActivityResult(要求code,因此code,数据);
      Session.getActiveSession()onActivityResult(这一点,要求code,因此code,数据)。
  }
 

解决方案

获得第一的权限

 私有静态最后的名单,其中,字符串> PERMISSIONS = Arrays.asList(
        电子邮件,user_location);
 

的方法获取用户信息

  Session.openActiveSession(RegisterActivity.this,真,新Session.StatusCallback(){

        //回调时,会话状态变化
        @覆盖
        公共无效呼叫(会话的会话,SessionState会的状态,
                例外的例外){
            / *
             * Session.getActiveSession()。onActivityResult(activity1,64206,
             * -1,activity1.getIntent());
             * /

            如果(session.isOpened()){

                名单<字符串>权限= session.getPermissions();
                如果(!isSubsetOf(权限,权限)){
                    Session.NewPermissionsRequest newPermissionsRequest =新Session.NewPermissionsRequest(
                            RegisterActivity.this,权限);
                    session.requestNewReadPermissions(newPermissionsRequest);
                    返回;
                }
                //使请求/ ME API
                Request.newMeRequest(会话,新GraphUserCallback(){

                    @覆盖
                    公共无效onCompleted(GraphUser用户,响应响应){
                        // TODO自动生成方法存根
                        Log.d(,+用户);
                        尝试 {

                            名称= user.getName();
                            电子邮件= user.getProperty(电子邮件)的toString()。
                            (。user.getLocation()的getProperty(姓名)的toString())的位置=;

                        }赶上(例外五){
                            // TODO自动生成的catch块
                            e.printStackTrace();
                        }

                    }
                })executeAsync()。

            }
        }
    });
 

isSubsetof法

 私人布尔isSubsetOf(集<字符串>的子集,
        收藏<字符串>超){
    对于(字符串字符串:子集){
        如果(!superset.contains(串)){
            返回false;
        }
    }
    返回true;
}
 

把这个code中的 onActivityResult

  @覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,因此code,数据);

    Log.d(活动结果,+请求code ++结果code ++ data.toString());
    Session.getActiveSession()。onActivityResult(这一点,要求code,
            因此code,数据);
}
 

网络在清单的权限

 <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
 

声明 Facebook的登录活动在清单

        

 <元数据
        机器人:名称=com.facebook.sdk.ApplicationId
        机器人:值=@字符串/ APP_ID/>
 

I am using Facebook SDK for Android to allow users to register and use app. I want to get some basic info about user like user name and email. Anyway, I have problem because I get null pointer exception when trying to get user email.

String email = user.getProperty("email").toString();

I assuming that I get this error because I did not request for email permission. How I can do that?

Here is the full code:

public class RegisterActivity extends ActionBarActivity{

Button btnFacebook;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    getSupportActionBar().hide();

    btnFacebook = (Button) findViewById(R.id.btn_facebook);


    btnFacebook.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Log.d("FACEBOOK", "Prije sesije");
            // start Facebook Login
                        Session.openActiveSession(RegisterActivity.this, true, new Session.StatusCallback() {
                            // callback when session changes state
                            @SuppressWarnings("deprecation")
                            @Override
                            public void call(Session session, SessionState state,
                                    Exception exception) {
                                Log.d("FACEBOOK", "U call");
                                if(session.isOpened()){                     

                                    Log.d("FACEBOOK", "ako je sesija otvorena");

                                    // make request to the /me API
                                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                                        @Override
                                        public void onCompleted(GraphUser user, Response response) {
                                            Log.d("FACEBOOK", "onCompleted");

                                            if(user != null){
                                                Log.d("FACEBOOK", "user razlicit od null");
                                                 String email = user.getProperty("email").toString();
                                                Toast.makeText(getApplicationContext(), "Ime "+user.getUsername().toString()+ "Email "+ email , 
                                                        Toast.LENGTH_SHORT).show();

                                                String userId = user.getId();


                                                //new DownloadImageTask(ivProfile).execute("http://graph.facebook.com/"+userId+"/picture?type=large");



                                                Log.d("ID", userId);



                                            }
                                            Log.d("ID", user.getId());


                                        }
                                    });
                                }
                                Log.d("FACEBOOK", "nije u sesisji");


                            }

                        });

        }
    });

}

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

解决方案

Get the permissions first

private static final List<String> PERMISSIONS = Arrays.asList(
        "email","user_location");

The Method for getting the user information

      Session.openActiveSession(RegisterActivity.this, true, new Session.StatusCallback() {

        // callback when session changes state
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            /*
             * Session.getActiveSession().onActivityResult(activity1,64206,
             * -1,activity1.getIntent());
             */

            if (session.isOpened()) {

                List<String> permissions = session.getPermissions();
                if (!isSubsetOf(PERMISSIONS, permissions)) {
                    Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                            RegisterActivity.this, PERMISSIONS);
                    session.requestNewReadPermissions(newPermissionsRequest);
                    return;
                }
                // make request to the /me API
                Request.newMeRequest(session, new GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        // TODO Auto-generated method stub
                        Log.d("",""+user);  
                        try {

                            name=user.getName();
                            email=user.getProperty("email").toString();
                            location=(user.getLocation().getProperty("name").toString());

                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }
                }).executeAsync();

            }
        }
    });

isSubsetof method

private boolean isSubsetOf(Collection<String> subset,
        Collection<String> superset) {
    for (String string : subset) {
        if (!superset.contains(string)) {
            return false;
        }
    }
    return true;
}

put this code in onActivityResult

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

    Log.d("Activity result","  "+requestCode+"   "+resultCode+"    "+data.toString());
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

Put Internet permission in Manifest

   <uses-permission android:name="android.permission.INTERNET" />

Declare Facebook Login Activity in manifest

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

这篇关于Facebook的SDK 3.7的Andr​​oid请求电子邮件的权限的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆