gpt4 book ai didi

java - 即使在 Android 中使用有效 token ,Facebook Session.openActiveSessionWithAccessToken 也无法正常工作

转载 作者:行者123 更新时间:2023-12-01 13:18:29 24 4
gpt4 key购买 nike

我正在使用 Android 和 Facebook API,基本上,我想要的是创建一个警报,每隔一定时间执行一些 Facebook 操作,即使用户已启动其设备并且应用程序未在系统中运行.

我的 FacebookLoginFragment 可以通过以下方式完美地使用 Facebook 登录按钮进行登录:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
loginDone = false;

uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);

Session.setActiveSession(new Session.Builder(getActivity().getBaseContext()).setApplicationId(getString(R.string.app_id)).build());

return inflater.inflate(R.layout.fragment_facebook_login, container, false);
}

这正在工作,这是处理程序:

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
SharedPreferences.Editor editor = sharedPreferences.edit();

if (session.getAccessToken() != null)
editor.putString("com.facebook.sdk.AccessToken", session.getAccessToken());

if (session.getExpirationDate()!= null)
editor.putLong("com.facebook.sdk.AccessTokenExpires", session.getExpirationDate().getTime());

editor.commit();

if (!loginDone) {
loginDone = true;
startActivity(new Intent(getActivity(), UpdateSnitchListActivity.class));
}
}
}

用户授权应用程序后我要做的是保存身份验证 token 。然后,在我的 BroadcastReceiver 中,我想访问 Facebook 的内容,但失败了:

public class MyBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Log.i("ALARM", "MyBootReceiver is executing when device boots");
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

if (sharedPreferences.getBoolean(context.getString(R.string.preference_use_service), true)) {
if (Session.getActiveSession() == null || !Session.getActiveSession().isOpened()) {
String accessTokenString = sharedPreferences.getString("com.facebook.sdk.AccessToken", null);
Long accessTokenExpires = sharedPreferences.getLong("com.facebook.sdk.AccessTokenExpires", 0);

Session.setActiveSession(new Session.Builder(context).setApplicationId(context.getString(R.string.app_id)).build());
AccessToken accessToken = AccessToken.createFromExistingAccessToken(accessTokenString, new Date(accessTokenExpires), null, AccessTokenSource.FACEBOOK_APPLICATION_NATIVE, null);
Session.openActiveSessionWithAccessToken(context, accessToken, null);
// And then here I get the user's friends list and fail
}
}
}
}
}

这是我每次尝试时都会遇到的错误:

Response:  responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 104, errorType: OAuthException, errorMessage: An access token is required to request this resource.}, isFromCache:false

我不知道问题是什么,因为我提供了访问 token ,而我从用户登录中获得的访问 token 已过期,并且当用户正常登录时它可以工作。

提前致谢!

最佳答案

尝试使用 String 来保存 accessTokenExpires 然后这样获取:

SimpleDateFormat format = new SimpleDateFormat( "ccc MMM dd HH:mm:ss ZZZZ yyyy", Locale.ENGLISH );
try {
Date expireDate = format.parse( accessTokenExpires );
} catch ( java.text.ParseException e ) {
e.printStackTrace();
}

这是我的工作代码:

SimpleDateFormat format = new SimpleDateFormat( "ccc MMM dd HH:mm:ss ZZZZ yyyy", Locale.ENGLISH );

try {
Date expireDate = format.parse( accessExpireStr );
AccessToken accessToken = AccessToken.createFromExistingAccessToken( accessTokenStr, expireDate, null, AccessTokenSource.FACEBOOK_APPLICATION_NATIVE, mPermissions );
Session.openActiveSessionWithAccessToken( mActivity, accessToken, mFacebookCallback );
} catch ( java.text.ParseException e ) {
e.printStackTrace();
}

哪里

List<String> mPermissions = new ArrayList<String>();
mPermissions.add( "public_profile" );
mPermissions.add( "email" );

关于java - 即使在 Android 中使用有效 token ,Facebook Session.openActiveSessionWithAccessToken 也无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22258136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com