nig*_*xed 7 android facebook-login facebook-sdk-4.0
我正在尝试将旧应用程序的登录代码从SDK 3.0迁移到SDK 4.0.我使用了实现登录LoginManager,因为我有自定义登录按钮.
问题是我没有得到Facebook API的回应.没有成功,没有错误,没有任何异常抛出.代码如下:
//global refs
//callbacks
private CallbackManager mCallbackManager;
private FacebookCallback<LoginResult> mFacebookCallback;
private List<String> mPermissions = Arrays.asList("email");
private LoginManager mLoginMgr;
private Activity mActivity;
//........
//code is inside method
FacebookSdk.sdkInitialize(getApplicationContext());
//perhaps a bit excessive
FacebookSdk.addLoggingBehavior(LoggingBehavior.GRAPH_API_DEBUG_INFO);
FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
FacebookSdk.setApplicationId(mActivity.getString(R.string.sample_fb_id));
//init callbacks
mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.v("LoginActivity login", loginResult.toString());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
try {
String email = object.getString("email");
Log.v("LoginActivity", "obtained email: ", email);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
@Override
public void onCancel() {
Log.e("LoginActivity", "facebook login canceled");
}
@Override
public void onError(FacebookException e) {
Log.e("LoginActivity", "facebook login failed error");
}
};
mCallbackManager = CallbackManager.Factory.create();
mLoginMgr = LoginManager.getInstance();
mLoginMgr.registerCallback(mCallbackManager, mFacebookCallback);
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
Run Code Online (Sandbox Code Playgroud)
使用Debugger,我可以看到这一行:
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);
被执行,但没有一个callbacks被触发.我在控制台中也没有错误,设备屏幕变黑,没有任何反应.
我认为这不重要,但代码是在包装类(外部Activity)中执行的.我在里面尝试了Activity,但没有任何区别.
有什么建议?非常感激.
编辑:
这在里面声明AndroidManifest.xml:
<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
Run Code Online (Sandbox Code Playgroud)
小智 11
如果您的代码位于片段中,请不要将mActivity变量用作Activity上下文.
去做:
添加一行:
callbackManager.onActivityResult(requestCode, resultCode, data); in onActivityResult(, , , ) in fragment.
Run Code Online (Sandbox Code Playgroud)呼叫:
LoginManager.getInstance().logInWithReadPermissions(**this**, Arrays.asList("public_profile", "user_friends"));
Run Code Online (Sandbox Code Playgroud)使用此,不要使用this.getActivity()
| 归档时间: |
|
| 查看次数: |
10445 次 |
| 最近记录: |