我在活动
中登录了facebookprivate 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" } }
有什么问题?怎么解决?
答案 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());
}
});`