Android:使用其"ParseFacebookUtils"将用户添加到Parse通过Facebook

pea*_*mak 5 android facebook parse-platform

我已经从Parse.com下载了样本,用于使用facebook登录并将uers添加到其数据浏览器中.其代码如下:

IntegratingFacebookTutorialApplication类

public class IntegratingFacebookTutorialApplication extends Application {

    static final String TAG = "MyApp";

    @Override
    public void onCreate() {
        super.onCreate();

        Parse.initialize(this, "Parse Application ID",
                "Parse Client Key");

        ParseFacebookUtils.initialize(getString(R.string.facebook_app_id));

    }
Run Code Online (Sandbox Code Playgroud)

登录课程

import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.parse.LogInCallback;
import com.parse.ParseException;
import com.parse.ParseFacebookUtils;
import com.parse.ParseUser;

public class LoginActivity extends Activity {

    private Button loginButton;
    private Dialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        loginButton = (Button) findViewById(R.id.loginButton);
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onLoginButtonClicked();
            }
        });

        // Check if there is a currently logged in user
        // and they are linked to a Facebook account.
        ParseUser currentUser = ParseUser.getCurrentUser();
        if ((currentUser != null) && ParseFacebookUtils.isLinked(currentUser)) {
            // Go to the user info activity
            showUserDetailsActivity();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        ParseFacebookUtils.finishAuthentication(requestCode, resultCode, data);
    }

    private void onLoginButtonClicked() {
        LoginActivity.this.progressDialog = ProgressDialog.show(
                LoginActivity.this, "", "Logging in...", true);
        List<String> permissions = Arrays.asList("basic_info", "user_about_me",
                "user_relationships", "user_birthday", "user_location");
        ParseFacebookUtils.logIn(permissions, this, new LogInCallback() {
            @Override
            public void done(ParseUser user, ParseException err) {
                LoginActivity.this.progressDialog.dismiss();
                if (user == null) 
                {
                    Toast.makeText(getApplicationContext(), "Uh oh. The user cancelled the Facebook login.",
                             Toast.LENGTH_SHORT).show();

                } else if (user.isNew()) {
                    Toast.makeText(getApplicationContext(), "User signed up and logged in through Facebook.",
                             Toast.LENGTH_SHORT).show();


                    showUserDetailsActivity();
                } else {
                    Toast.makeText(getApplicationContext(), "User logged in through Facebook!",
                             Toast.LENGTH_SHORT).show();


                    showUserDetailsActivity();
                }
            }
        });
    }

    private void showUserDetailsActivity() {
        Intent intent = new Intent(this, UserDetailsActivity.class);
        startActivity(intent);
    }

}
Run Code Online (Sandbox Code Playgroud)

题:

启动应用程序(本教程),将显示登录页面(页面A),并在中间登录facebook按钮.

如果用户的设备中没有facebook app,则上述代码可以顺利成功运行,按下登录按钮后会弹出一个对话框,登录后可以获取用户详细信息并将用户详细信息添加到数据中Parse里面的浏览器.

但是,如果用户已经在设备中安装了Facebook应用程序,则不会出现对话框,而是会打开Facebook应用程序并要求登录.这就是问题发生的地方.它显示为权限对话框,然后在按"确定"后,对话框消失并返回到原始页面(第A页).

敬酒言论"Uh oh. The user cancelled the Facebook login".

代码有什么问题?还是ADT环境?我应该在清单中进一步添加任何东西

我研究如下:

  1. 有人说'经过多次尝试,诀窍是support.jar,特别是android-support-v4.jar.这附带了最新的Facebook SDK,但不是您项目的标准.使用SDK中的Facebook并将其复制到libs文件夹并链接.(https://parse.com/questions/urgent-parsefacebookutilslogin-issue-android)

  2. 我在该活动的清单文件上使用了android:noHistory ="true".因此,每当打开facebook登录活动时,我的活动就会被自动销毁.但是我在清单中没有这样的history = true语句.