Need to fetch twitter user profile data after successfully logging in using parse. Please refer below code :
ParseTwitterUtils.logIn(SignupActivity.this, new LogInCallback() {
#Override
public void done(ParseUser parseUser, ParseException e) {
if (parseUser == null) {
Log.d("MyApp", "Uh oh. The user cancelled the Twitter login.");
} else if (parseUser.isNew()) {
Log.d("MyApp", "User signed up and logged in through Twitter!");
} else {
Log.d("MyApp", "User logged in through Twitter!");
}
}
});
I tried to get values from Parseuser object returned after login but it is showing null.
Suggest what should I do after logging in.
Thanks
First off: Are you sure that you are logged in? To verify this, make sure that in your console there is the Log "User logged in through Twitter!", if so, you can add:
String twitter = ParseTwitterUtils.getTwitter().getScreenName();
Log.d(MainActivity.class.getSimpleName(), twitter + "");
under your else if and else block, or you can replace your code with this:
ParseTwitterUtils.logIn(SignupActivity.this, new LogInCallback() {
#Override
public void done(ParseUser parseUser, ParseException e) {
if (parseUser == null) {
Log.d("MyApp", "Uh oh. The user cancelled the Twitter login.");
} else if (parseUser.isNew()) {
Log.d("MyApp", "User signed up and logged in through Twitter!");
String twitter = ParseTwitterUtils.getTwitter().getScreenName();
Log.d(MainActivity.class.getSimpleName(), twitter + "");
} else {
Log.d("MyApp", "User logged in through Twitter!");
String twitter = ParseTwitterUtils.getTwitter().getScreenName();
Log.d(MainActivity.class.getSimpleName(), twitter + "");
}
}
});
If your class is not "MainActivity", type it in the Log.d.
If you are having trouble singing in, you can also try this:
user = new ParseUser();
user.setUsername("Username");
user.setPassword("password");
user.setEmail("email#example.com");
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Hooray! Let them use the app now.
} else {
// Sign up didn't succeed. Look at the ParseException
// to figure out what went wrong
}
}
});
if (!ParseTwitterUtils.isLinked(user)) {
ParseTwitterUtils.link(user, this, new SaveCallback() {
#Override
public void done(ParseException ex) {
if (ParseTwitterUtils.isLinked(user)) {
Log.d("MyApp", "Woohoo, user logged in with Twitter!");
String twitter = ParseTwitterUtils.getTwitter().getScreenName();
Log.d(MainActivity.class.getSimpleName(), twitter + "");
}
}
});
}
define "ParseUser user;" outside the onCreate method.
Related
I am trying to logout from the current user. Login as another user, delete that user. Come back to the original user. This is what I have so far... It works fine, except it does not log back in the original user... It says Invalid Session Token. But this session token was retrieved using currentUser.getSessionToken() How could it be invalid??
PS: I have enabled the session on parse dashboard and in the app:
ParseUser.enableRevocableSessionInBackground();
Code:
ParseUser currentUser = ParseUser.getCurrentUser();
final String sessionToken = currentUser.getSessionToken();
Log.d(TAG, currentUser.getObjectId() + " sessionToken: " + sessionToken);
ParseUser.logOut();
ParseUser.logInInBackground(userTest, passTest, new LogInCallback() {
#Override
public void done(final ParseUser onlineUser, ParseException e) {
if ((e == null) && (onlineUser != null)) {
Log.d(TAG, "onlineUser.deleteInBackground...");
onlineUser.deleteInBackground(new DeleteCallback() {
#Override
public void done(ParseException e) {
if (e == null) {
Log.d(TAG, "onlineUser.deleted!");
ParseUser.logOut();
ParseUser.becomeInBackground(sessionToken, new LogInCallback() {#Override
public void done(ParseUser user, ParseException e) {
if ((e == null) && (user !=null)){
Log.d(TAG, "user retrieved...");
} else {
Log.d(TAG, "user failed to be retrieved...");
if (e != null) Log.d(TAG, "ParseUser.becomeInBackground ERROR: " + e.toString());
}
});
}
}
});
}
}
});
I'm trying to get a user's gender using the facebook sdk for Android. I am using parse to login/signup so I have access to all users id and access token. When I try and make a new HTTP GET request, I can only get MY information - but I need [user_x]'s information. If I use the Graph API Explorer it works just fine, but in code it doesn't work. Here's some of the code I have:
Login:
List<String> permissions = Arrays.asList("email","basic_info", "user_about_me", "user_location", "public_profile");
ParseFacebookUtils.logIn(permissions, this, new LogInCallback() {
#Override
public void done(ParseUser user, ParseException e) {
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's like new or something.", Toast.LENGTH_SHORT).show();
try {
user.put("facebookId", currentUser.getJSONObject("authData").getJSONObject("facebook").get("id").toString());
user.put("access_token", currentUser.getJSONObject("authData").getJSONObject("facebook").get("access_token").toString());
user.save();
} catch(Exception ex) {
Log.e("Nope", ex.toString());
}
login();
} else {
Toast.makeText(getApplicationContext(), "User just like logged in or something", Toast.LENGTH_SHORT).show();
login();
}
}
});
Request:
/* make the API call */
new Request(
ParseFacebookUtils.getSession(),
"/1376286562687763",
null,
HttpMethod.GET,
new Request.Callback() {
public void onCompleted(Response response) {
Log.d(response.toString(), "");
try {
Log.d(response.getGraphObject().getProperty("gender").toString(), "");
} catch (Exception e) {
Log.e("oops", e.toString());
}
}
}
).executeAsync();
If I type that ID in the Graph API Explorer - works like a charm. If I run this code I get a null object returned. If I change that user id to "me" or my user id it works fine as well. Can anyone please help?
I am trying to get email address of user from ParseFacebook for android but i am getting null when i try to fetch email.
here is my code
//on Login:
List<String> permissions = Arrays.asList("email","basic_info", "user_about_me", "user_location");
ParseFacebookUtils.logIn(permissions,SignUpActivity. this, new LogInCallback() {
#Override
public void done(ParseUser user, ParseException err) {
SignUpActivity.this.progressDialog.dismiss();
if(err!=null)
Log.w("parse exception",""+err.getMessage());
if (user == null) {
Log.e("FB","Uh oh. The user cancelled the Facebook login.");
} else if (user.isNew()) {
Log.w("FB","User signed up and logged in through Facebook!");
//showUserDetailsActivity();
getProfileInfo();
} else {
Log.w("FB","User logged in through Facebook!");
// showUserDetailsActivity();
getProfileInfo();
}
}
});
making request:
Request request = Request.newMeRequest(ParseFacebookUtils.getSession(),new Request.GraphUserCallback() {
#Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
JSONObject userProfile = new JSONObject();
try {
// Populate the JSON object
try {
userProfile.put("facebookId", user.getId());
userProfile.put("name", user.getName());
} catch (Exception e) {
// TODO: handle exception
}
if (user.getProperty("email") != null) {
userProfile.put("email",(String) user.getProperty("email"));
}
if (user.getLocation().getProperty("name") != null) {
userProfile.put("location", (String) user.getLocation().getProperty("name"));
}
if (user.getProperty("gender") != null) {
userProfile.put("gender",(String) user.getProperty("gender"));
}
} catch (JSONException e) {
Log.e("Facebook parsing data","Error parsing returned user data.");
}
} else if (response.getError() != null) {
if ((response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_RETRY) || (response.getError().getCategory() == FacebookRequestError.Category.AUTHENTICATION_REOPEN_SESSION)) {
Log.e("Facebook parsing data","The facebook session was invalidated.");
//onLogoutButtonClicked();
} else {
Log.e("Facebook parsing data","Some other error: "+ response.getError().getErrorMessage());
}
}
}
});
request.executeAsync();
I have tried everything but where ever i do i am getting email null :(
After setting the permissions as above access the email via: user.asMap().get("email"));
You should get the email like this
String email = (String) response.getGraphObject().getProperty("email");
if(email!=null && !email.equals("")
//email variable should've email id.
Try removing the permission list in the login call.
ParseFacebookUtils.logIn(SignUpActivity.this, new LogInCallback() {
//you can add permissions on later screens.
}
Please add you this request:
Request request = Request.newMeRequest(ParseFacebookUtils.getSession(),new Request.GraphUserCallback()
In login request condition => user.isnew()
else if (user.isNew()) {
Log.w("FB","User signed up and logged in through Facebook!");
//showUserDetailsActivity();
getProfileInfo();
}
write your block in between this and you will be able to get new user info with email also.
This perfectly works in iOS and sure will help in android.
Before the line
request.executeAsync();
add these three lines.
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,email");
request.setParameters(parameters);
Now you will get email in your response
I want a unique user but I don't need it to be a formal thing for my app. So, on launch I inspect shared preferences for a previously stored username. I handle the user creation or login like so:
String parseUsername = _appPrefs.getParseUsername();
_progress.setVisibility(View.VISIBLE);
if (parseUsername == null) {
Log.v(TAG, "Creating a user.");
ParseUser.enableAutomaticUser();
_user = ParseUser.getCurrentUser();
_user.setPassword("abc123");
_user.saveInBackground(new SaveCallback() {
#Override
public void done(ParseException e) {
if (e == null) {
Log.w(TAG, String.format("User '%s' created.", _user.getUsername()));
_progress.setVisibility(View.GONE);
_appPrefs.saveParseUsername(_user.getUsername());
createStory();
return;
}
Log.e(TAG, "Error creating user: ", e);
}
});
} else {
Log.v(TAG, String.format("Logging the user '%s' in with password '%s'.", parseUsername, "abc123"));
ParseUser.logInInBackground(parseUsername, "abc123", new LogInCallback() {
#Override
public void done(ParseUser user, ParseException e) {
Log.v(TAG, "User logged in.");
_progress.setVisibility(View.GONE);
if (e == null) {
createStory();
return;
}
Log.e(TAG, "Error logging in: ", e);
}
});
}
I can see the user being successfully created in the logs. I can kill the app and re-launch but it always fails with "invalid login credentials" response from Parse.
If I manually enter abc123 in the Parse data browser then everything works. Ideas?
I am working on an application that uses Parse and I want to login using Facebook.
This is my code:
Button facebook = (Button)findViewById(R.id.facebook);
facebook.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
ParseFacebookUtils.logIn(signUpStep2.this, new LogInCallback() {
public void done(ParseUser user, ParseException err){
if (user == null) {Log.d("My app", "NULL");}
} else if (user.isNew()){Log.d("My app", "New User");}
else{Log.d("My app", "User");}
However, I am always getting a Null user, and a Null ParseException err.
What is my error?
try to set permission on login method.
you can also check these links: Android Facebook login returns null user and ParseFacebookUtils.LogIn I keep getting a null ParseUser object
ParseFacebookUtils.logIn(Arrays.asList("email",Permissions.Friends.ABOUT_ME,Permissions.Friends.BIRTHDAY),
this, new LogInCallback() {
#Override
public void done(ParseUser user, ParseException err) {
if (user == null) {
Log.d("My app", "NULL");
} else if (user.isNew()) {
Log.d("My app", "New User");
} else {
Log.d("My app", "User");
}
}
});