我正在将Facebook登录集成到我的应用程序中。我已将所有必需的代码放入片段类中。我还已经在Facebook开发者控制台中注册了我的应用程序。并将fb_app_id放在我的string.xml中。每当我点击Facebook登录按钮时,它都会将我重定向到浏览器上的屏幕,屏幕上显示“抱歉,出了点问题,我们正在研究中”
LogCat消息:
E / GraphResponse:{HttpStatus:400,errorCode:100,subErrorCode:33, errorType:GraphMethodException,errorMessage:不支持的get 请求。 ID为'fb_app_id'的对象不存在,不能为 由于缺少权限而加载,或不支持此操作。 请阅读Graph API文档,网址为 https://developers.facebook.com/docs/graph-api}
这是我到目前为止所做的:
我的HomeFragment代码:
内部onCreateView函数:
FacebookSdk.sdkInitialize(getActivity());
AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
if (currentAccessToken == null) {
Toast.makeText(getActivity(), "User logged out successfully", Toast.LENGTH_LONG).show();
}
}
};
accessToken = AccessToken.getCurrentAccessToken();
callbackManager = CallbackManager.Factory.create();
loginButton.setFragment(this);
loginButton.setReadPermissions(Arrays.asList(new String[]{"user_photos", "email",
"user_birthday", "public_profile", "AccessToken"}));
// If you are using in a fragment, call loginButton.setFragment(this);
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
getProfileData();
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
此后,我创建了GetProfileData函数和onActivityResult回调:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
public void getProfileData() {
try {
accessToken = AccessToken.getCurrentAccessToken();
GraphRequest request = GraphRequest.newMeRequest(
accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
String name = object.getString("name");
Toast.makeText(getActivity(), "name" + name, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields",
"id,name,email,gender, birthday");
request.setParameters(parameters);
request.executeAsync();
} catch (Exception e) {
e.printStackTrace();
}
}
在我的应用程序/成绩文件中:
实现'com.facebook.android:facebook-android-sdk:5.0.0'
以下是清单文件中application标记下的代码:
<activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity>
如果我缺少什么,请告诉我。我已将密钥哈希添加到开发人员控制台,并按照官方Facebook开发人员网站(即https://developers.facebook.com/apps/559151138175777/fb-login/quickstart/)中所述的步骤进行操作。