Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在Facebook集成中,当我点击登录按钮时,它会显示加载并返回主屏幕?_Android_Facebook Graph Api_Facebook Login_Facebook Sdk 4.0 - Fatal编程技术网

Android 在Facebook集成中,当我点击登录按钮时,它会显示加载并返回主屏幕?

Android 在Facebook集成中,当我点击登录按钮时,它会显示加载并返回主屏幕?,android,facebook-graph-api,facebook-login,facebook-sdk-4.0,Android,Facebook Graph Api,Facebook Login,Facebook Sdk 4.0,我正在我的项目中进行facebook集成。但问题是当我点击facebook登录按钮时,它会显示加载并重新运行到主屏幕。有人能告诉我是什么问题吗 这是我的主要活动:- public class MainActivity extends AppCompatActivity { private FacebookData mFacebookData; private Button mLoginButton; @Override protected void onCre

我正在我的项目中进行facebook集成。但问题是当我点击facebook登录按钮时,它会显示加载并重新运行到主屏幕。有人能告诉我是什么问题吗

这是我的主要活动:-

public class MainActivity extends AppCompatActivity {

    private FacebookData mFacebookData;
    private Button mLoginButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mFacebookData = new FacebookData();
        mLoginButton = (Button) findViewById(R.id.button);

        mLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                callFacebookLogin();
            }
        });
    }

    private void callFacebookLogin() {

        Session session = Session.getActiveSession();
        if (session != null) {
            Log.e("session :", "session already build");


            Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {

                    if (user != null) {

                        String str = user.getName();

                        try {


                            String id = user.getId();
                            String firstname = user.getFirstName();
                            String lastname = user.getLastName();
                            String pic = "http://graph.facebook.com/" + id + "/picture?type=large";
                            Log.e("id....", id);
                            Log.e("firstname....", firstname);

                            mFacebookData.setId(id);
                            mFacebookData.setFirstname(firstname);
                            mFacebookData.setLastname(lastname);
                            mFacebookData.setPicture(pic);


                        } catch (Exception e) {

                            e.printStackTrace();
                        }


                    }


                }
            });
            Request.executeBatchAsync(request);
        } else {

            Session.openActiveSession(MainActivity.this, true, new Session.StatusCallback() {
                @Override
                public void call(Session session, SessionState state, Exception exception) {


                    if (session.isOpened()) {
                        if (state == SessionState.OPENED) {

                            Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
                                @Override
                                public void onCompleted(GraphUser user, Response response) {


                                    if (user != null) {

                                        String str = user.getName();


                                    }

                                    try {

                                        String id = user.getId();
                                        String firstname = user.getFirstName();
                                        String lastname = user.getLastName();
                                        String pic = "http://graph.facebook.com/"
                                                + id
                                                + "/picture?type=large";


                                        mFacebookData.setId(id);
                                        mFacebookData.setFirstname(firstname);
                                        mFacebookData.setLastname(lastname);
                                        mFacebookData.setPicture(pic);


                                    } catch (Exception e) {

                                        e.printStackTrace();
                                    }


                                }
                            });

                            Request.executeBatchAsync(request);
                        }

                    }


                }
            });


        }

    }
}
这是我的舱单:-

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.aaa.examplepractise">

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


    <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">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.facebook.LoginActivity"
            android:screenOrientation="portrait" />

        <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/APP_ID" />


    </application>

</manifest>

这可能是由于以下原因造成的:

  • 您没有连接到internet
  • 您尚未授予internet访问权限(Manifest.xml)
  • 您尚未为应用程序使用正确的密码
  • 您没有提供正确的应用程序Id
  • 试试最新的方法做

    在片段类中包括以下内容:

    private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d("Login", "onSuccess");
                    GraphRequest.newMeRequest(
                            loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(JSONObject me, GraphResponse response) {
                                    if (response.getError() != null) {
                                        // handle error
                                    } else {
                                        email = me.optString("email");
                                        String id = me.optString("id");
                                        String social_id=me.optString("id");
                                        String name= me.optString("name");
                                        String gender=  me.optString("gender");
                                        boolean verified_user=  me.optBoolean("is_verified");                                   
                                    }
                                }
                            }).executeAsync();
                }
    
    
                @Override
                public void onCancel () {
                    Log.d("Login", "onCancel");
                }
    
                @Override
                public void onError (FacebookException e){
                    Log.d("Login", "onError " + e);
    
                }
            };
    
    在oncreate方法中添加以下代码:

     FacebookSdk.sdkInitialize(getContext());
            mCallbackManager = CallbackManager.Factory.create();
            setupTokenTracker();
            setupProfileTracker();
    
                    mTokenTracker.startTracking();
            mProfileTracker.startTracking();
    
            try {
    
                PackageInfo info = getActivity().getPackageManager().getPackageInfo("package name here", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    // Log.e("Key", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (Exception ex) {
                StringWriter errors = new StringWriter();
                ex.printStackTrace(new PrintWriter(errors));
                // Log.e("Error", errors.toString());
    
            }
    
    TokenTracker和PRofileTracker方法:

     private void setupTokenTracker() {
            mTokenTracker = new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
                    // Log.d("VIVZ", "" + currentAccessToken);
                }
            };
        }
    
        private void setupProfileTracker() {
            mProfileTracker = new ProfileTracker() {
                @Override
                protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
                    // Log.d("VIVZ", "" + currentProfile);
    
                }
            };
        }
    
    在onaCtivityResult中,您将获得数据,因此按如下方式添加:

     @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            // Log.e("info", "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);
            Bundle bundle = data.getExtras();
            for (String key : bundle.keySet()) {
                Object value = bundle.get(key);
            }      
                mCallbackManager.onActivityResult(requestCode, resultCode, data);
    
        }
    
    在Gradle文件中添加以下依赖项:

    编译'com.facebook.android:facebook android sdk:4.0.0'

    在xml中,包含如下按钮:

     <com.facebook.login.widget.LoginButton
                        android:id="@+id/btn_fb"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="1dp"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:singleLine="true"
                        android:textColor="@color/white"
                        android:textSize="16sp"
                        fb:login_text="@string/facebook"
                        fb:logout_text="@string/facebook" />
    
    
    
    在清单中添加以下权限、元数据和活动标记:

     <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <activity
                android:name="com.facebook.FacebookActivity"
                android:label="title_facebook_login" />
    
            <meta-data
                android:name="com.facebook.sdk.ApplicationId"
                android:value="@string/app_id" />
    
    
    

    在活动上添加片段并执行代码。希望这有助于让我知道,如果需要问任何其他问题

    发生这种情况的原因如下:

  • 您没有连接到internet
  • 您尚未授予internet访问权限(Manifest.xml)
  • 您尚未为应用程序使用正确的密码
  • 您没有提供正确的应用程序Id
  • 试试最新的方法做

    在片段类中包括以下内容:

    private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.d("Login", "onSuccess");
                    GraphRequest.newMeRequest(
                            loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(JSONObject me, GraphResponse response) {
                                    if (response.getError() != null) {
                                        // handle error
                                    } else {
                                        email = me.optString("email");
                                        String id = me.optString("id");
                                        String social_id=me.optString("id");
                                        String name= me.optString("name");
                                        String gender=  me.optString("gender");
                                        boolean verified_user=  me.optBoolean("is_verified");                                   
                                    }
                                }
                            }).executeAsync();
                }
    
    
                @Override
                public void onCancel () {
                    Log.d("Login", "onCancel");
                }
    
                @Override
                public void onError (FacebookException e){
                    Log.d("Login", "onError " + e);
    
                }
            };
    
    在oncreate方法中添加以下代码:

     FacebookSdk.sdkInitialize(getContext());
            mCallbackManager = CallbackManager.Factory.create();
            setupTokenTracker();
            setupProfileTracker();
    
                    mTokenTracker.startTracking();
            mProfileTracker.startTracking();
    
            try {
    
                PackageInfo info = getActivity().getPackageManager().getPackageInfo("package name here", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    // Log.e("Key", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (Exception ex) {
                StringWriter errors = new StringWriter();
                ex.printStackTrace(new PrintWriter(errors));
                // Log.e("Error", errors.toString());
    
            }
    
    TokenTracker和PRofileTracker方法:

     private void setupTokenTracker() {
            mTokenTracker = new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
                    // Log.d("VIVZ", "" + currentAccessToken);
                }
            };
        }
    
        private void setupProfileTracker() {
            mProfileTracker = new ProfileTracker() {
                @Override
                protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
                    // Log.d("VIVZ", "" + currentProfile);
    
                }
            };
        }
    
    在onaCtivityResult中,您将获得数据,因此按如下方式添加:

     @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            // Log.e("info", "onActivityResult:" + requestCode + ":" + resultCode + ":" + data);
            Bundle bundle = data.getExtras();
            for (String key : bundle.keySet()) {
                Object value = bundle.get(key);
            }      
                mCallbackManager.onActivityResult(requestCode, resultCode, data);
    
        }
    
    在Gradle文件中添加以下依赖项:

    编译'com.facebook.android:facebook android sdk:4.0.0'

    在xml中,包含如下按钮:

     <com.facebook.login.widget.LoginButton
                        android:id="@+id/btn_fb"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_margin="1dp"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:singleLine="true"
                        android:textColor="@color/white"
                        android:textSize="16sp"
                        fb:login_text="@string/facebook"
                        fb:logout_text="@string/facebook" />
    
    
    
    在清单中添加以下权限、元数据和活动标记:

     <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <activity
                android:name="com.facebook.FacebookActivity"
                android:label="title_facebook_login" />
    
            <meta-data
                android:name="com.facebook.sdk.ApplicationId"
                android:value="@string/app_id" />
    
    
    


    在活动上添加片段并执行代码。希望这有助于让我知道,如果需要问任何其他问题

    只需发布你得到的日志即可。。设置登录ActivityResult functionAlso facebook已将sdk版本更改为4.0+,在该版本中,他们处理的片段不在activity中,我认为您使用的是旧版本version@PreetikaKaur我更新了我的代码。请看日志。我认为它没有给出任何错误。我使用的是活动而不是片段。我应该使用片段而不是活动。您使用的是哪个sdk版本?我使用的是第三方库。它是编译'com.github.asne.facebook:facebook:3.17.2',只需发布你得到的日志即可。。设置登录ActivityResult functionAlso facebook已将sdk版本更改为4.0+,在该版本中,他们处理的片段不在activity中,我认为您使用的是旧版本version@PreetikaKaur我更新了我的代码。请看日志。我认为它没有给出任何错误。我使用的是活动而不是片段。我应该使用片段而不是活动。您使用的是哪个sdk版本?我使用的是第三方库。它是编译'com.github.asne.facebook:facebook:3.17.2',我正确地遵循了上面提到的步骤。但在我的例子中,当我点击登录按钮时,它会显示加载时间,并返回到主屏幕。com.github.asne.facebook:facebook:3.17.2‘如果你说我应该给你我正在使用的新代码,你正在使用旧代码吗?最新版本是4.0+,您正在使用3.17。此外,facebook还提供了一个简单的步骤来包含社交登录,这就是为什么需要为用户添加第三方this@aarav现在就检查它是否在oncreate中,只需全局声明对象@aarav private CallbackManager mCallbackManager;如果这些URL对您有帮助,请检查这些URL。是的,4.0不是最新的,因此请包含最新的URL,并按照上述步骤正确重建项目。但在我的例子中,当我点击登录按钮时,它会显示加载时间,并返回到主屏幕。com.github.asne.facebook:facebook:3.17.2‘如果你说我应该给你我正在使用的新代码,你正在使用旧代码吗?最新版本是4.0+,您正在使用3.17。此外,facebook还提供了一个简单的步骤来包含社交登录,这就是为什么需要为用户添加第三方this@aarav现在就检查它是否在oncreate中,只需全局声明对象@aarav private CallbackManager mCallbackManager;如果这些URL对您有帮助,请检查这些URL。是的,4.0不是最新的,因此请包含最新的URL,并清理重建您的项目