Android 集成Facebook SDK后登录Facebook
如何在我的应用程序中将登录与Facebook集成?我已经集成了Android 集成Facebook SDK后登录Facebook,android,facebook,Android,Facebook,如何在我的应用程序中将登录与Facebook集成?我已经集成了Facebook SDK,但无法打开Facebook的登录活动 我试试这个 // Your Facebook APP ID private static String APP_ID = "MY_ID"; @Override protected void onCreate(Bundle savedInstanceState) { FacebookSdk.sdkInitialize(this.
Facebook SDK
,但无法打开Facebook
的登录活动
我试试这个
// Your Facebook APP ID
private static String APP_ID = "MY_ID";
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
return view;
}
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
info.setText(
"User ID: "
+ loginResult.getAccessToken().getUserId()
+ "\n" +
"Auth Token: "
+ loginResult.getAccessToken().getToken()
);
}
@Override
public void onCancel() {
info.setText("Login attempt canceled.");
}
@Override
public void onError(FacebookException e) {
info.setText("Login attempt failed.");
}
});
}
//您的Facebook应用程序ID
私有静态字符串APP_ID=“MY_ID”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
sdkinInitialize(this.getApplicationContext());
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
//应用程序代码
}
@凌驾
公开作废{
//应用程序代码
}
@凌驾
public void onError(facebook异常){
//应用程序代码
}
});
//回调注册
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
//应用程序代码
}
@凌驾
公开作废{
//应用程序代码
}
@凌驾
public void onError(facebook异常){
//应用程序代码
}
});
返回视图;
}
registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
info.setText(
“用户ID:”
+loginResult.getAccessToken().getUserId()
+“\n”+
“身份验证令牌:”
+loginResult.getAccessToken().getToken()
);
}
@凌驾
公开作废{
info.setText(“登录尝试已取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
info.setText(“登录尝试失败”);
}
});
}
以下是获取Facebook个人资料详细信息的完整代码。。。我使用过Facebook SDK 4.4.0
public class MainActivity extends Activity {
LoginButton loginButton;
private CallbackManager callbackManager;
private ProgressDialog pDialog;
URL myurl;
String profilepic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(MainActivity.this);
setContentView(R.layout.activity_main);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays
.asList("public_profile, email, user_birthday, user_friends"));
callbackManager = CallbackManager.Factory.create();
loginButton.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
new fblogin().execute(loginResult.getAccessToken());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
}
@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);
}
public class fblogin extends AsyncTask<AccessToken, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Loading...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(AccessToken... params) {
GraphRequest request = GraphRequest.newMeRequest(params[0],
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,
GraphResponse response) {
Log.v("MainActivity", response.toString());
try {
String profile_pic = object.getString("id");
try {
myurl = new URL(
"https://graph.facebook.com/"
+ profile_pic + "/picture");
} catch (Exception e) {
e.printStackTrace();
}
profilepic = myurl.toString();
Log.v("Name", object.getString("first_name"));
Log.v("Email", object.getString("email"));
Log.v("Profile Pic Url", profilepic);
Log.v("Gender", object.getString("gender"));
} catch (JSONException jse) {
// session.logoutUser();
Log.e("fb json exception", jse.toString());
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,first_name,email,gender");
request.setParameters(parameters);
GraphRequest.executeBatchAndWait(request);
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
@Override
protected void onActivityResult(int requestCode, int responseCode,
Intent intent) {
// TODO Auto-generated method stub
callbackManager.onActivityResult(requestCode, responseCode, intent);
}
}
公共类MainActivity扩展活动{
登录按钮登录按钮;
私人CallbackManager CallbackManager;
私人对话;
URL-myurl;
字符串轮廓图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FacebookSdk.sdkinInitialize(MainActivity.this);
setContentView(R.layout.activity_main);
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
setReadPermissions(数组
.asList(“公众档案、电子邮件、用户生日、用户朋友”);
callbackManager=callbackManager.Factory.create();
loginButton.registerCallback(callbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
新建fblogin().execute(loginResult.getAccessToken());
}
@凌驾
公开作废{
}
@凌驾
公共无效onError(FaceBook例外e){
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共类fblogin扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(MainActivity.this);
设置消息(“加载…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
受保护的字符串doInBackground(AccessToken…参数){
GraphRequest请求=GraphRequest.NewMereRequest(参数[0],
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
未完成的公共void(JSONObject对象,
GraphResponse(反应){
Log.v(“MainActivity”,response.toString());
试一试{
字符串配置文件_pic=object.getString(“id”);
试一试{
myurl=新URL(
"https://graph.facebook.com/"
+个人资料(图片+“/图片”);
}捕获(例外e){
e、 printStackTrace();
}
profilepic=myurl.toString();
Log.v(“Name”,object.getString(“first_Name”);
Log.v(“Email”,object.getString(“Email”);
Log.v(“Profile Pic Url”,profilepic);
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
import java.util.Arrays;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.widget.TextView;
import com.example.facebookapp.R;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.UserInfoChangedCallback;
public class MainActivity extends FragmentActivity {
private LoginButton loginBtn;
private TextView username;
private UiLifecycleHelper uiHelper;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(this, statusCallback);
uiHelper.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username = (TextView) findViewById(R.id.username);
loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
loginBtn.setReadPermissions(Arrays.asList("email"));
loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
if (user != null) {
username.setText("You are currently logged in as " + user.getName());
} else {
username.setText("You are not logged in.");
}
}
});
}
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.d("MainActivity", "Facebook session opened.");
} else if (state.isClosed()) {
Log.d("MainActivity", "Facebook session closed.");
}
}
};
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
uiHelper.onSaveInstanceState(savedState);
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.facebook.widget.LoginButton
android:id="@+id/fb_login_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
facebook:confirm_logout="false"
facebook:fetch_user_info="true" />
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:textSize="16sp" />
</LinearLayout>
<activity android:name="com.facebook.LoginActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/APP_ID" />
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
buttonsEnabled(true);
//Log.d("FacebookSampleActivity", "Facebook session opened");
} else if (state.isClosed()) {
buttonsEnabled(false);
//Log.d("FacebookSampleActivity", "Facebook session closed");
}
}
};
{
if (!session.isClosed()) {
session.closeAndClearTokenInformation();
//clear your preferences if saved
}
}
else
{
session = new Session(context);
Session.setActiveSession(session);
session.closeAndClearTokenInformation();
//clear your preferences if saved
}
}