我在Eclipse中成功设置了Facebook SDK 4.4.1。
我在MainActivity
和XML中编写了一些简单的代码。
这是我的XML代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.facebookintegration.MainActivity" >
<com.facebook.login.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_marginBottom="30dp" />
</LinearLayout>
这里我只宣布Facebook按钮。
MainActivity.java
:
public class MainActivity extends FragmentActivity {
LoginButton lb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_main);
lb=(LoginButton)findViewById(R.id.login_button);
}
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
Log.i("Facebook Login Activity","Performed Successfully");
super.onActivityResult(arg0, arg1, arg2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.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();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
当我按下Facebook的登录按钮时,它会显示微调器,一段时间后它会返回MainActivity
。
我的应用是否正在执行登录?如果没有,我需要添加什么代码?
另外,如何获取用户详细信息的AccessToken
?
答案 0 :(得分:3)
我认为你缺少的是回调。
试试这个: 声明你的回调管理器
<entityFramework>
<defaultConnectionFactory
type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices,
MySql.Data.Entity.EF6, Version=6.9.7.0,
Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
现在使用此
在public static CallbackManager callbackmanager;
中创建它
onCreate()
不要忘记设置登录按钮的权限
callbackmanager = CallbackManager.Factory.create();
现在注册回调
loginButton.setReadPermissions("public_profile", "email", "user_friends");
你还需要调用回调管理器的onActivityResult()
loginButton.registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult result) {
Toast.makeText(getApplicationContext(), "Logged in successfully!", Toast.LENGTH_SHORT).show();
Log.i(TAG, "Facebook login successful.");
// you can make a new graph request for user info here
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "Logging in canceled.", Toast.LENGTH_SHORT).show();
Log.i(TAG, "Facebook login canceled.");
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getApplicationContext(), "Error occurred while logging in. Please try again.", Toast.LENGTH_SHORT).show();
Log.i(TAG, "Facebook login error.");
}
});
有关permorfing图形请求Facebook SDK Graph - Android
的详细信息