【问题标题】:Not able to get userDetails from facebook using SocialAuth无法使用 SocialAuth 从 facebook 获取 userDetails
【发布时间】:2016-02-21 17:49:52
【问题描述】:

我正在使用 SocialAuth 库来集成 fb/linkedin。我已成功登录,但我能够获取用户个人资料。我的代码如下:

public class MainActivity extends Activity  implements View.OnClickListener{

Button fb,linkedIn;
SocialAuthAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fb=(Button)findViewById(R.id.button);
    linkedIn=(Button)findViewById(R.id.button2);
    fb.setOnClickListener(this);
    linkedIn.setOnClickListener(this);

    adapter = new SocialAuthAdapter(new ResponseListener());
    adapter.addProvider(SocialAuthAdapter.Provider.FACEBOOK,R.drawable.facebook);
    adapter.addProvider(SocialAuthAdapter.Provider.LINKEDIN,R.drawable.linkedin);

    try{
        adapter.addConfig(SocialAuthAdapter.Provider.FACEBOOK,"901453509923310","29940b7c91f8a9d4db7e72f7e3e72e1d","publish_actions");

    }
    catch(Exception ex)
    {
        Log.e("Adding config",ex.toString());
    }


}


@Override
public void onClick(View view) {
    switch (view.getId()) {

        case R.id.button:
            adapter.authorize(MainActivity.this, SocialAuthAdapter.Provider.FACEBOOK);

            break;

        case R.id.button2:

            break;
    }


}

private final class ResponseListener implements DialogListener{

    @Override
    public void onComplete(Bundle bundle) {
        String token=adapter.getCurrentProvider().getAccessGrant().getKey();
        Log.e("KEY ",token);
        adapter.getUserProfileAsync(new ProfileDataListener());

    }

    @Override
    public void onError(SocialAuthError socialAuthError) {

        Log.e("ERRROR ", socialAuthError.getMessage());

    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onBack() {

    }
}


private final class ProfileDataListener implements SocialAuthListener<Profile> {
    @Override
    public void onExecute(String s, Profile profile) {
        Profile profileMap = profile;

       // Log.d("Custom-UI","Validate ID         = " + profileMap.getValidatedId());
        Log.d("Info","First Name          = " + profileMap.getFirstName());
        Log.d("Info","Last Name           = " + profileMap.getLastName());
        Log.d("Info","Email               = " + profileMap.getEmail());
        Log.d("Info","Gender                   = " + profileMap.getGender());
        Log.d("Info","Country                  = " + profileMap.getCountry());
        Log.d("Info","Language                 = " + profileMap.getLanguage());
        Log.d("Info","Location                 = " + profileMap.getLocation());
        Log.d("Info","Profile Image URL  = " + profileMap.getProfileImageURL());

    }

    @Override
    public void onError(SocialAuthError socialAuthError) {
        Log.e("GETTING PROFILE INFO ",socialAuthError.getMessage());

    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}


}

成功登录后,我得到以下 logcat :

请帮助我在这一点上卡住了。谢谢

【问题讨论】:

  • 不..这不是您共享@Selvin的链接的重复问题。我有类似的崩溃。我发现这是因为“getUserProfileAsync”无法从 Facebook 图形 API 检索一些数据,因此发生了 JsonParseException,导致某些参数仍然为 NULL。试图找出原因..
  • 大声笑,是的,它是......配置文件为空,因为它从未被分配(并且链接解释了如何检查什么是空的)......为什么?这是一个不同的问题(但这就是坏/无异常/错误处理的结束方式)......他的代码位于 onError(不管为什么......这可能是互联网短缺)但他想使用这个未分配的变量跨度>

标签: android facebook socialauth


【解决方案1】:

您可以使用 facebook sdk 代替社交身份验证

【讨论】:

  • 谢谢,但我不想使用它。Social Auth 为多个社交媒体网站提供支持
  • 是的,没错,但即使是社交身份验证也处于开发阶段。所以有更多的机会卡在某个点上。
  • 好的,但首先我会尝试修复这个错误,如果它不起作用,我会转向原生方法。感谢您的建议
  • 这是我的荣幸.. 一切顺利;)
【解决方案2】:

您似乎没有要求用户配置文件权限。在 facebook SDK 中看起来像这样

mFacebookLoginManager.logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));

所以我猜想在 SocialAuth 的某个地方有一行请求权限。此外,您必须使用应用程序 ID 为您的应用程序签名,该应用程序 ID 在您注册为 facebook 开发人员后 facebook 会为您提供。

【讨论】:

  • 你能告诉我如何在socialAuth中做到这一点
  • 对不起,我没用过。此外,可能还有不止一个名为“SocialAuth”的库。
猜你喜欢
  • 2013-06-22
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2016-01-31
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多