Bugfixing: Social Media Login more reliable, especially with Google+

This commit is contained in:
Dennis Thiessen
2017-05-27 23:55:05 +02:00
parent 42db486ce4
commit 41bbc671ca
3 changed files with 40 additions and 26 deletions

View File

@@ -76,8 +76,6 @@ public class FacebookButtonFragment extends Fragment {
FacebookSdk.sdkInitialize(getContext()); FacebookSdk.sdkInitialize(getContext());
callbackManager = CallbackManager.Factory.create(); callbackManager = CallbackManager.Factory.create();
initFacebookButton(); initFacebookButton();
} }
@Override @Override
@@ -112,13 +110,13 @@ public class FacebookButtonFragment extends Fragment {
@Override @Override
public void onCancel() { public void onCancel() {
Log.d("FB","OnCancel"); Log.d("FB","OnCancel");
((LoginActivity) getActivity()).showMessage("Facebook LogIn canceled"); ((LoginActivity) getActivity()).showMessage("Facebook LogIn canceled. Please use E-Mail instead.");
} }
@Override @Override
public void onError(FacebookException exception) { public void onError(FacebookException exception) {
Log.d("FB","OnError"); Log.d("FB","OnError: " + exception.toString());
((LoginActivity) getActivity()).showMessage("Error while SignIn: ErrorMsg: " + exception.toString()); ((LoginActivity) getActivity()).showMessage("Could not log in with Facebook. Please use E-Mail instead or try again later.");
} }
}); });
} }
@@ -127,7 +125,6 @@ public class FacebookButtonFragment extends Fragment {
GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() { GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() {
@Override @Override
public void onCompleted(JSONObject objects, GraphResponse response) { public void onCompleted(JSONObject objects, GraphResponse response) {
try { try {
((LoginActivity) getActivity()).handleSocialMediaLogin(objects.getString("id"), "facebook", objects.getString("first_name"), objects.getString("email")); ((LoginActivity) getActivity()).handleSocialMediaLogin(objects.getString("id"), "facebook", objects.getString("first_name"), objects.getString("email"));
} catch (JSONException e) { } catch (JSONException e) {

View File

@@ -2,7 +2,10 @@ package org.deke.risk.riskahead.fragment;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentSender; import android.content.IntentSender;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@@ -26,6 +29,7 @@ import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person; import com.google.android.gms.plus.model.people.Person;
import org.deke.risk.riskahead.LoginActivity; import org.deke.risk.riskahead.LoginActivity;
import org.deke.risk.riskahead.MainActivity;
import org.deke.risk.riskahead.R; import org.deke.risk.riskahead.R;
/** /**
@@ -82,11 +86,28 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien
} }
private void performClickAction() { private void performClickAction() {
Log.d(TAG,"Click on Google+ Button performed");
if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.GET_ACCOUNTS}, MY_PERMISSIONS_REQUEST_ACCOUNTS); Log.d(TAG,"Permission not granted yet - request now");
// Should we show an explanation?
AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();
alertDialog.setTitle("Request Permission");
alertDialog.setMessage("Google needs permission to see your profile (Contact List) in order to enable log-in with Google+. However, if you do not grant permission, log in with Google+ will not be available.");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS}, MY_PERMISSIONS_REQUEST_ACCOUNTS);
}
});
alertDialog.show();
}else{ }else{
Log.d(TAG,"Permission already granted");
if(mGoogleApiClient.isConnected()){ if(mGoogleApiClient.isConnected()){
Person currentPerson = getProfileInformation(); Person currentPerson = getProfileInformation();
((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient)); ((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient));
@@ -97,28 +118,28 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien
} }
@Override @Override
public void onRequestPermissionsResult(int requestCode, public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
String permissions[], int[] grantResults) { Log.d(TAG,"RequestCode: "+requestCode);
switch (requestCode) { switch (requestCode) {
case MY_PERMISSIONS_REQUEST_ACCOUNTS: { case MY_PERMISSIONS_REQUEST_ACCOUNTS: {
// If request is cancelled, the result arrays are empty. // If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG,"Permission granted");
if(mGoogleApiClient.isConnected()){ if(mGoogleApiClient.isConnected()){
Person currentPerson = getProfileInformation(); Person currentPerson = getProfileInformation();
((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient)); ((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient));
}else{ }else{
signInWithGplus(); signInWithGplus();
} }
} else { } else {
Log.d(TAG,"Permission not granted - what now?");
Toast.makeText(mContext, "Could not log in with Google+. Please use E-Mail instead or try again later.",
Toast.LENGTH_LONG).show();
} }
return;
} }
// other 'case' lines to check for other
// permissions this app might request
} }
} }
@@ -162,7 +183,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien
} }
if (!mIntentInProgress) { if (!mIntentInProgress) {
mConnectionResult = result; mConnectionResult = result;
if (mSignInClicked) { if (mSignInClicked) {
@@ -171,7 +191,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien
resolveSignInError(); resolveSignInError();
} }
} }
} }
@Override @Override
@@ -187,8 +206,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien
mGoogleApiClient.connect(); mGoogleApiClient.connect();
} }
/** /**
* Sign-in into google * Sign-in into google
* */ * */

View File

@@ -86,7 +86,7 @@ public class ProfileStatisticsFragment extends Fragment {
} }
private StringRequest getStringRequestProfileStats() { private StringRequest getStringRequestProfileStats() {
return new StringRequest(Request.Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener<String>() { return new StringRequest(Request.Method.POST, AppConfig.REST_GET_USERSTATS, new Response.Listener<String>() {
@Override @Override
public void onResponse(String response) { public void onResponse(String response) {
@@ -96,11 +96,12 @@ public class ProfileStatisticsFragment extends Fragment {
JSONObject jObj = new JSONObject(response); JSONObject jObj = new JSONObject(response);
boolean error = jObj.getBoolean("error"); boolean error = jObj.getBoolean("error");
if (!error) { if (!error) {
jObj = jObj.getJSONObject("msg");
points.setText(jObj.getString("points"));
ranking.setText(jObj.getString("rank"));
posts.setText(jObj.getString("numberOfPosts")); posts.setText(jObj.getString("numberOfPosts"));
txtMemberSince.setText(jObj.getString("created_at"));
JSONObject subJObj = jObj.getJSONObject("msg");
points.setText(subJObj.getString("points"));
ranking.setText(subJObj.getString("rank"));
txtMemberSince.setText(subJObj.getString("created_at"));
JSONArray jSubs = jObj.getJSONArray("subs"); JSONArray jSubs = jObj.getJSONArray("subs");
@@ -158,7 +159,6 @@ public class ProfileStatisticsFragment extends Fragment {
@Override @Override
protected Map<String, String> getParams() { protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("tag", AppConfig.REST_GET_USERSTATS);
params.put("uid", parent.user.get(SessionManager.KEY_UID)); params.put("uid", parent.user.get(SessionManager.KEY_UID));
params.put("token", parent.user.get(SessionManager.TOKEN)); params.put("token", parent.user.get(SessionManager.TOKEN));
params.put("userstatsid", uid); params.put("userstatsid", uid);