facebook与android的集成并不一致

nx7onnlm  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(422)

我正在尝试将facebook登录与我的应用程序集成。这很简单:用户点击我登录屏幕上的一个按钮,我从facebook上获得他们的电子邮件和其他信息,然后我将这些信息提交到我的网站,并让他们成为一个帐户(我不使用密码,所以这很管用)。
然而,登录按钮只工作了1/3的时间。其他时候,它启动facebook活动时,我会在facebook屏幕上看到一个加载微调器,然后应用程序退出到我的主屏幕。没有强制关闭通知,没有logcat错误,什么都没有。
以下是我的登录活动代码(与facebook相关的部分):

  1. package com.taptag.beta;
  2. /**IMPORTS REMOVED FOR BREVITY**/
  3. public class FacebookLogInActivity extends NetworkActivity {
  4. public static final String APP_ID = "OMITTED FOR PRIVACY";
  5. public static final String LOG_OUT = "Log Out";
  6. Facebook facebook = new Facebook(APP_ID);
  7. private AsyncFacebookRunner mAsyncRunner;
  8. private Handler mHandler;
  9. private SharedPreferences mPrefs;
  10. private Button mLoginButton;
  11. private static final String[] PERMISSIONS = { "email" };
  12. private EditText firstName;
  13. private EditText lastName;
  14. private EditText email;
  15. private Button signupButton;
  16. private TextView errorView;
  17. private ProgressBar facebookSpinner;
  18. private ProgressBar signupSpinner;
  19. //Taken from mkyong
  20. private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
  21. private Pattern emailPattern;
  22. @Override
  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.facebook_main);
  26. mPrefs = getSharedPreferences("TapTag", MODE_PRIVATE);
  27. Integer userId = mPrefs.getInt("user_id", -1);
  28. mLoginButton = (Button) findViewById(R.id.loginButton);
  29. // Facebook properties
  30. mAsyncRunner = new AsyncFacebookRunner(facebook);
  31. mHandler = new Handler();
  32. // Get existing saved session information
  33. String access_token = mPrefs.getString("access_token", null);
  34. long expires = mPrefs.getLong("access_expires", 0);
  35. if (access_token != null) {
  36. facebook.setAccessToken(access_token);
  37. }
  38. if (expires != 0) {
  39. facebook.setAccessExpires(expires);
  40. }
  41. errorView = (TextView) findViewById(R.id.signupError);
  42. facebookSpinner = (ProgressBar) findViewById(R.id.facebookSpinner);
  43. signupSpinner = (ProgressBar) findViewById(R.id.signupSpinner);
  44. hideSpinners();
  45. errorView.setVisibility(View.GONE);
  46. emailPattern = Pattern.compile(EMAIL_PATTERN);
  47. firstName = (EditText) findViewById(R.id.signupFirstName);
  48. lastName = (EditText) findViewById(R.id.signupLastName);
  49. email = (EditText) findViewById(R.id.signupEmail);
  50. signupButton = (Button) findViewById(R.id.signupButton);
  51. signupButton.setOnClickListener(new OnClickListener() {
  52. @Override
  53. public void onClick(View v) {
  54. boolean isValid = validateInputs();
  55. if (isValid) {
  56. SignupTask signupTask = new SignupTask();
  57. signupTask.execute(null, null);
  58. }
  59. }
  60. });
  61. mLoginButton.setOnClickListener(new OnClickListener() {
  62. @Override
  63. public void onClick(View v) {
  64. if (!facebook.isSessionValid()) {
  65. logIn();
  66. } else {
  67. logOut();
  68. }
  69. }
  70. });
  71. }
  72. @Override
  73. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  74. super.onActivityResult(requestCode, resultCode, data);
  75. facebook.authorizeCallback(requestCode, resultCode, data);
  76. }
  77. @Override
  78. public void onResume() {
  79. super.onResume();
  80. // Extend the session information if it is needed
  81. //if (facebook != null && !facebook.isSessionValid()) {
  82. facebook.extendAccessTokenIfNeeded(this, null);
  83. //}
  84. if (LOG_OUT.equals(getIntent().getAction())) {
  85. logOut();
  86. } else {
  87. Integer userId = mPrefs.getInt("user_id", -1);
  88. if (userId > 0) {
  89. continueToHomeScreen();
  90. }
  91. }
  92. }
  93. @Override
  94. public void onBackPressed() {
  95. //Do nothing, don't want people getting back into the app
  96. }
  97. /**
  98. * Validate the signup form. True if valid, false otherwise.
  99. * @return
  100. */
  101. public boolean validateInputs() {
  102. /**NOT RELEVANT**/
  103. }
  104. private FacebookUserInfo userFromForm() {
  105. /**NOT RELEVANT**/
  106. }
  107. private boolean validateFirstName() {
  108. /**NOT RELEVANT**/
  109. }
  110. private boolean validateLastName() {
  111. /**NOT RELEVANT**/
  112. }
  113. private boolean validateEmail() {
  114. /**NOT RELEVANT**/
  115. }
  116. public void hideSpinners() {
  117. facebookSpinner.setVisibility(View.GONE);
  118. signupSpinner.setVisibility(View.GONE);
  119. }
  120. public void continueToHomeScreen() {
  121. Intent toHomeScreen = new Intent(FacebookLogInActivity.this, HomeScreenActivity.class);
  122. FacebookLogInActivity.this.startActivity(toHomeScreen);
  123. }
  124. public void logIn() {
  125. facebookSpinner.setVisibility(View.VISIBLE);
  126. mLoginButton.setVisibility(View.GONE);
  127. facebook.authorize(FacebookLogInActivity.this, PERMISSIONS, new DialogListener() {
  128. @Override
  129. public void onComplete(Bundle values) {
  130. SharedPreferences.Editor editor = mPrefs.edit();
  131. editor.putString("access_token", facebook.getAccessToken());
  132. editor.putLong("access_expires", facebook.getAccessExpires());
  133. editor.commit();
  134. requestUserData();
  135. }
  136. @Override
  137. public void onFacebookError(FacebookError e) {
  138. mLoginButton.setVisibility(View.VISIBLE);
  139. hideSpinners();
  140. }
  141. @Override
  142. public void onError(DialogError e) {
  143. mLoginButton.setVisibility(View.VISIBLE);
  144. hideSpinners();
  145. }
  146. @Override
  147. public void onCancel() {
  148. mLoginButton.setVisibility(View.VISIBLE);
  149. hideSpinners();
  150. }
  151. });
  152. }
  153. public void logOut() {
  154. /**NOT RELEVANT**/
  155. }
  156. public void requestUserData() {
  157. Bundle params = new Bundle();
  158. params.putString("field name", "name");
  159. params.putString("field email", "email");
  160. mAsyncRunner.request("me", params, new BaseRequestListener() {
  161. @Override
  162. public void onComplete(final String response, final Object state) {
  163. FacebookUserInfo facebookUserInfo = TapTagAPI.userInfoFromFacebook(response);
  164. UserFetchResponse userFetchResponse = TapTagAPI.fetchUser(facebookUserInfo);
  165. if (!userFetchResponse.hasError()) {
  166. commitUserInfo(userFetchResponse);
  167. continueToHomeScreen();
  168. } else {
  169. mHandler.post(new Runnable() {
  170. @Override
  171. public void run() {
  172. hideSpinners();
  173. mLoginButton.setVisibility(View.VISIBLE);
  174. }
  175. });
  176. }
  177. }
  178. });
  179. }
  180. public void commitUserInfo(UserFetchResponse userFetchResponse) {
  181. SharedPreferences.Editor editor = mPrefs.edit();
  182. editor.putInt("user_id", userFetchResponse.getId());
  183. editor.putString("user_name", userFetchResponse.getFirst() + " " + userFetchResponse.getLast());
  184. editor.commit();
  185. }
  186. public class SignupTask extends AsyncTask<Void, Void, UserFetchResponse> {
  187. @Override
  188. protected void onPreExecute() {
  189. signupSpinner.setVisibility(View.VISIBLE);
  190. signupButton.setVisibility(View.GONE);
  191. }
  192. @Override
  193. protected UserFetchResponse doInBackground(Void... arg0) {
  194. FacebookUserInfo user = userFromForm();
  195. UserFetchResponse response = TapTagAPI.fetchUser(user);
  196. return response;
  197. }
  198. @Override
  199. protected void onPostExecute(UserFetchResponse response) {
  200. if (response.success()) {
  201. commitUserInfo(response);
  202. continueToHomeScreen();
  203. } else {
  204. errorView.setVisibility(View.VISIBLE);
  205. }
  206. }
  207. }
  208. }
niknxzdl

niknxzdl1#

写下面的登录函数而不是你的登录函数,它会解决你的问题。

  1. public void logIn() {
  2. facebookSpinner.setVisibility(View.VISIBLE);
  3. mLoginButton.setVisibility(View.GONE);
  4. facebook.authorize(FacebookLogInActivity.this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {
  5. @Override
  6. public void onComplete(Bundle values) {
  7. SharedPreferences.Editor editor = mPrefs.edit();
  8. editor.putString("access_token", facebook.getAccessToken());
  9. editor.putLong("access_expires", facebook.getAccessExpires());
  10. editor.commit();
  11. requestUserData();
  12. }
  13. @Override
  14. public void onFacebookError(FacebookError e) {
  15. mLoginButton.setVisibility(View.VISIBLE);
  16. hideSpinners();
  17. }
  18. @Override
  19. public void onError(DialogError e) {
  20. mLoginButton.setVisibility(View.VISIBLE);
  21. hideSpinners();
  22. }
  23. @Override
  24. public void onCancel() {
  25. mLoginButton.setVisibility(View.VISIBLE);
  26. hideSpinners();
  27. }
  28. });
  29. }
展开查看全部

相关问题