我正在创建一个应用,我希望用户能够使用Facebook登录,以便可以个性化UI。我已按照说明进行操作,并确保已运行代码,但Facebook不允许登录,因此我认为我错过了一段代码,并且对这是什么想法。
我观看了一些有关如何设置代码并阅读有关实现的Facebook文档的youtube视频。我重写并重新组织了代码,以确保以正确的顺序进行编译。 LoginManager.getInstance()。logInWithReadPermissions(this,Arrays.asList(“ email”,“ public_profile”)); 我将其删除后放入 onCreate ,代码不再循环,但仍未输入新的Activity
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSION_CODE = 1;
CallbackManager callbackManager;
LoginButton loginFacebook;
Button loginbutton, signupbutton;
String first_name;
String last_name;
String email;
String image_url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
loginbutton = findViewById(R.id.login);
loginFacebook = findViewById(R.id.facebook_login_button);
signupbutton = findViewById(R.id.signup);
tokenTracker.isTracking();
checkPermissions();
/* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});*/
}
AccessTokenTracker tokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
if(currentAccessToken == null){
Toast.makeText(MainActivity.this, "You Are Not Logged In", Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
tokenTracker.stopTracking();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void checkPermissions(){
if(Build.VERSION.SDK_INT >= 23 &&ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.INTERNET) == PackageManager.PERMISSION_GRANTED){
AccessToken accessToken = AccessToken.getCurrentAccessToken();
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
callbackManager = CallbackManager.Factory.create();
if(isLoggedIn) {
Intent skipLoggin = new Intent(this, FrontPageClass.class);
startActivity(skipLoggin);
Toast.makeText(this, "This is Alright Alright Alright", Toast.LENGTH_SHORT).show();
}
}else{
requestPermissions();
}
}
private void requestPermissions(){
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.INTERNET)){
new AlertDialog.Builder(this)
.setTitle("Permission Needed")
.setMessage("This Permission is needed for access to several Internet based items such as Facebook")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.INTERNET}, REQUEST_PERMISSION_CODE);
}
})
.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
}else{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.INTERNET}, REQUEST_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == REQUEST_PERMISSION_CODE){
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
}
public void login_clikd(View view) {
Intent l = new Intent(this, LoginClass.class);
startActivity(l);
}
public void signup_clikd(View view) {
Intent s = new Intent(this, SignupClass.class);
startActivity(s);
}
public void fblogin(View view) {
Intent toLogin = new Intent(this, FrontPageClass.class);
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email","public_profile"));
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken newAccessToken = loginResult.getAccessToken();
GraphRequest request = GraphRequest.newMeRequest(newAccessToken, (object, response) -> {
try {
first_name = object.getString("first_name");
last_name = object.getString("last_name");
email = object.getString("email");
String id = object.getString("id");
image_url = "https://graph.facebook.com/" + id + "/pictures?type=normal";
} catch (JSONException e) {
e.printStackTrace();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "first_name, last_name ,email ,id");
request.setParameters(parameters);
request.executeAsync();
toLogin.putExtra("First Name", first_name);
toLogin.putExtra("Last Name", last_name);
toLogin.putExtra("Email", email);
toLogin.putExtra("Profile Picture", image_url);
startActivity(toLogin);
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
callbackManager.onActivityResult(resultCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
当我单击 fblogin 按钮时,我希望打开Facebook登录名。然后,我输入我的凭据,并在出现提示时单击“继续”,它将打开登录脚本,而不是打开新的活动。我想我的代码在某处循环,不会释放。 我放错了哪些代码,并且运行了某些代码,这些代码不应该在Class中?