如何修复bug - 登录facebook

时间:2016-05-09 11:02:42

标签: java android facebook

我在活动

中登录了facebook
private CallbackManager callbackManager;
private LoginButton loginFBButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(LAYOUT);

    callbackManager = CallbackManager.Factory.create();
    loginFBButton = (LoginButton) findViewById(R.id.loginFBButton);
    loginFBButton.setReadPermissions(Arrays.asList("email", "public_profile"));
    loginFBButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            final String accessToken = loginResult.getAccessToken().getToken();
            LogTag.v("onSuccess - getToken - " + accessToken);
            GraphRequest request = GraphRequest.newMeRequest(
                    loginResult.getAccessToken(),
                    new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            LogTag.v("onSuccess - " + response.toString());

                            // Application code
                            try {
                                String email = object.getString("email");
                                LogTag.v("email - " + email);
                                String name = object.getString("name");
                                LogTag.v("name - " + name);
                                saveUserData(name, email, accessToken);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    });
            Bundle parameters = new Bundle();
            parameters.putString("fields", "id,name,email,gender,birthday");
            request.setParameters(parameters);
            request.executeAsync();
        }

        @Override
        public void onCancel() {
            LogTag.v("onCancel");
        }

        @Override
        public void onError(FacebookException error) {
            LogTag.v("onError - " + error.getMessage());
        }
    });
}

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

in gradle

dependencies { compile 'com.facebook.android:facebook-android-sdk:4.11.0' }
AndroidManifest中的

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
    android:name=".application.MyApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
    <activity
        android:name=".activity.ActivitySignIn"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </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" />
</application>

在MyApp中

public class MyApp extends Application {
@Override
public void onCreate() {
    super.onCreate();
    FacebookSdk.sdkInitialize(getApplicationContext());
}   }

但它并不总是适用于4.4.2 - 好的,在一个正常的电话(5.1)中,另一个在登录后用进度条挂起,其中有一个确认访问个人数据的通知,并且然后触发onCancel

在手机上,它可能是日志中的错误,显示了该消息的链接:

{       "error": {
  "message": "An access token is required to request this resource.",
  "type": "OAuthException",
  "code": 104,
  "fbtrace_id": "AV/53FbmMya"       }   }

有什么问题?怎么解决?

1 个答案:

答案 0 :(得分:0)

尝试使用我在片段中使用的代码。

 FacebookSdk.sdkInitialize(getActivity());
    callbackManager = CallbackManager.Factory.create();
    LoginManager.getInstance().registerCallback(callbackManager,
            new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    // App code
                    accessToken = loginResult.getAccessToken()
                            .getToken();
                    Log.i("accessToken", accessToken);



                }

                @Override
                public void onCancel() {
                    // App code
                    Toast.makeText(getActivity(), "on Cancel", Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onError(FacebookException exception) {
                    // App code
                    Toast.makeText(getActivity(), "on Error", Toast.LENGTH_SHORT).show();
                    IRoidAppHelper.Log("FacebokkError", exception.toString());
                }
            });`