活动:
public class FrameActivity extends BaseActivity {
public static CallbackManager callbackManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
// FacebookSdk.sdkInitialize is called in the Application onCreate
callbackManager = CallbackManager.Factory.create();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
Run Code Online (Sandbox Code Playgroud)
分段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_login, container, false);
LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
loginButton.setReadPermissions("public_profile");
loginButton.setReadPermissions("email");
loginButton.setReadPermissions("user_birthday");
// If using in a fragment
loginButton.setFragment(this);
// Other app specific specialization
// Callback registration
loginButton.registerCallback(FrameActivity.callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
return view;
}
Run Code Online (Sandbox Code Playgroud)
Rag*_*ddy 49
试试这个:
FacebookSdk.sdkInitialize()在片段中初始化onCreateView().
下一行初始化callbackManager = CallbackManager.Factory.create();
落实onActivityResult()在片段类.
添加你callbackManager.onActivityResult(requestCode, resultCode, data);
的片段onActivityResult().
确保删除FacebookInit()和callbackManager活动.
Pra*_*ash 16
loginButton.setFragment(this);
Run Code Online (Sandbox Code Playgroud)
这条线已经存在问题.但只是想为其他任何过度开发的开发人员写这篇文章.
如果您在片段中使用FB登录按钮,请确保将其添加到onCreateView方法中.这样可以确保回调转到Fragment而不是转到您的活动.
小智 10
对于旧版本:
更改方法如下:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
com.facebook.Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
else
{
com.facebook.Session.getActiveSession().closeAndClearTokenInformation();
}
}
Run Code Online (Sandbox Code Playgroud)
更新:对于v2.3,从这里:
您将回调添加到您的活动或片段的onCreate()方法:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果登录成功,则该LoginResult参数具有新AccessToken权限,以及最近授予或拒绝的权限.
登录成功后您不需要registerCallback,您可以选择使用AccessTokenTracker下面描述的类跟随当前访问令牌更改.
然后onActivityResult()将登录结果转发给callbackManager创建的onCreate():
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
Run Code Online (Sandbox Code Playgroud)
与FacebookSDK登录或共享集成的每个活动和片段都应转发onActivityResult到callbackManager.
| 归档时间: |
|
| 查看次数: |
33265 次 |
| 最近记录: |