[英]Facebook SDK - Nothing happens after login
Currently created a Facebook login button and I'm now trying to redirect to a new activity on succesful login.目前创建了一个 Facebook 登录按钮,我现在尝试重定向到成功登录的新活动。 For this I'm of course using the onSucces() function.为此,我当然使用 onSucces() 函数。
However when I click login on my application it loads, but nothing happens.但是,当我在我的应用程序上单击登录时,它会加载,但没有任何反应。 It stays at the login page.它停留在登录页面。
My LoginActivity code:我的登录活动代码:
package com.example.frederik.testpleasework;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
public class LoginActivity extends Activity {
LoginButton login;
TextView info;
CallbackManager callbackManager;
//Creating and initializing the feature(Code from Facebook install guide)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext()); //Calls for the facebook feature
callbackManager = CallbackManager.Factory.create(); //Initializing callback, checking login result
setContentView(R.layout.content_main);
info = (TextView) findViewById(R.id.info);
login = (LoginButton) findViewById(R.id.login_button);
login.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Intent i = new Intent(LoginActivity.this, LandingActivity.class);
startActivity(i);
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException e) {
}
});
}
}
And the code for my next activity (LandingActivity):以及我的下一个活动 (LandingActivity) 的代码:
package com.example.frederik.testpleasework;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
public class LandingActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_landing);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
}
I assume the error is somewhere in one of those classes, but if you need more information from other code-sections, feel free to request.我假设错误出在这些类之一中,但如果您需要其他代码部分的更多信息,请随时提出要求。
Edit, androidmanifest:编辑,androidmanifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.frederik.testpleasework" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar" >
</activity>
<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" />
<activity android:name=".LoginActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/fbid" />
<uses-permission android:name="android.permission.CAMERA" />
//Requests permission to use the camera
<uses-feature android:name="android.hardware.camera" />
//A device NEEDS to have a camera to install the app
<activity
android:name=".LandingActivity"
android:label="@string/title_activity_landing"
android:theme="@style/AppTheme.NoActionBar" >
</activity>
</application>
</manifest>
From the official Facebook documentation.来自官方 Facebook 文档。 Use the method doFBLogin
for Login and fetch basic profile .使用doFBLogin
方法登录并获取基本配置文件。
// Write only required permissions
private String[] PERMISSION = new String[]{"user_photos", "email",
"user_about_me", "public_profile", "user_about_me", "user_friends",
"user_likes", "user_hometown",
"user_education_history", "user_work_history", "user_birthday"};
private CallbackManager callbackmanager;
private String strFirstname;
private String strLastname;
private String strEmail;
private String strProfilePhoto;
private String strGender;
private void doFBLogin() {
callbackmanager = CallbackManager.Factory.create();
// Set permissions
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList(PERMISSION));
LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(
JSONObject json,
GraphResponse response) {
if (response.getError() != null) {
new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login));
} else {
try {
strFirstname = json.getString("first_name") + " " + json.getString("last_name");
strLastname = json.getString("last_name");
strEmail = json.getString("email");
strProfilePhoto = json.getJSONObject("picture").getJSONObject("data").getString("url");
strGender = json.getString("gender");
} catch (JSONException e) {
}
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email,gender,birthday,first_name,last_name,picture.type(large)");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
new ShowToast(SplashScreen.this, getResources().getString(R.string.failed_login));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackmanager.onActivityResult(requestCode, resultCode, data);
}
And in your manifest
do the following.并在您的manifest
执行以下操作。
<!-- For detect network connections -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<activity
android:name="com.facebook.FacebookActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/app_id" />
<!-- Provider -->
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider1460656834264602"
android:exported="true"
android:writePermission="true" />
First step, init facebook sdk:第一步,初始化facebook sdk:
FacebookSdk.sdkInitialize(this.getApplicationContext());
The Second step, create Call back manager:第二步,创建回调管理器:
CallbackManager callbackManager = CallbackManager.Factory.create();
The third step, add read permission:第三步,添加读取权限:
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
Next step, register call back:下一步,注册回调:
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});
All the code above you can put to onCreate
method.上面的所有代码都可以放在onCreate
方法中。 Final, u must add onActivityResult
for callback:最后,您必须为回调添加onActivityResult
:
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
Try this code, I hope it help you.试试这个代码,希望对你有帮助。 You can references this .你可以参考这个。
mButtonLogin.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
handlePendingAction();
GraphRequest request = GraphRequest.newMeRequest(
loginResult.getAccessToken(),new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object,GraphResponse response) {
Log.v("LoginActivity", response.toString());
try {
Intent i = new Intent(LoginActivity.this, LandingActivity.class);
startActivity(i);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
request.executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
try adding this code in your login activity.尝试在您的登录活动中添加此代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.