簡體   English   中英

Facebook SDK - 登錄后沒有任何反應

[英]Facebook SDK - Nothing happens after login

目前創建了一個 Facebook 登錄按鈕,我現在嘗試重定向到成功登錄的新活動。 為此,我當然使用 onSucces() 函數。

但是,當我在我的應用程序上單擊登錄時,它會加載,但沒有任何反應。 它停留在登錄頁面。

我的登錄活動代碼:

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) {

            }
        });
    }

}

以及我的下一個活動 (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();
            }
        });
    }

}

我假設錯誤出在這些類之一中,但如果您需要其他代碼部分的更多信息,請隨時提出要求。

編輯,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>

來自官方 Facebook 文檔。 使用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);
    }

並在您的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" />

第一步,初始化facebook sdk:

FacebookSdk.sdkInitialize(this.getApplicationContext());

第二步,創建回調管理器:

CallbackManager callbackManager = CallbackManager.Factory.create();

第三步,添加讀取權限:

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));

下一步,注冊回調:

LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});

上面的所有代碼都可以放在onCreate方法中。 最后,您必須為回調添加onActivityResult

@Override
 protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

試試這個代碼,希望對你有幫助。 你可以參考這個

  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) {

                }


            });

嘗試在您的登錄活動中添加此代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM