change oauth login, add parse fragment

This commit is contained in:
CounterFire2023 2024-02-20 16:05:16 +08:00
parent 640311163a
commit 04a804cf79
4 changed files with 68 additions and 50 deletions

File diff suppressed because one or more lines are too long

View File

@ -181,9 +181,7 @@
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.BROWSABLE" />
<data <data android:scheme="cfoauthcb" android:path="/login_result" />
android:scheme="cfoauthcb"
android:path="/login_result" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity

View File

@ -126,11 +126,7 @@ public class MainActivity extends UnityPlayerActivity
CocosJSHelper.initJSEnv(getApplicationContext()); CocosJSHelper.initJSEnv(getApplicationContext());
// begin of google sign // begin of google sign
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) // mGoogleSignInClient = initGsiClient();
.requestScopes(new Scope(Scopes.EMAIL))
.requestIdToken(getString(R.string.default_web_client_id1))
.build();
mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
// end of google sign // end of google sign
// begin of google oauth sign // begin of google oauth sign
@ -241,6 +237,14 @@ public class MainActivity extends UnityPlayerActivity
} }
private GoogleSignInClient initGsiClient() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.EMAIL))
.requestIdToken(getString(R.string.default_web_client_id1))
.build();
return GoogleSignIn.getClient(this, gso);
}
@Override @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); super.onRequestPermissionsResult(requestCode, permissions, grantResults);
@ -252,6 +256,9 @@ public class MainActivity extends UnityPlayerActivity
public void signWithGoogle(String funId) { public void signWithGoogle(String funId) {
this.mFunID = funId; this.mFunID = funId;
if (isGooglePlayServicesAvailable()) { if (isGooglePlayServicesAvailable()) {
if (mGoogleSignInClient == null) {
mGoogleSignInClient = initGsiClient();
}
GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
if (account != null) { if (account != null) {
Log.w(TAG, "already login: " + account.getIdToken()); Log.w(TAG, "already login: " + account.getIdToken());
@ -289,8 +296,7 @@ public class MainActivity extends UnityPlayerActivity
private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try { try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class); GoogleSignInAccount account = completedTask.getResult(ApiException.class);
Log.w(TAG, "signIn success: "); Log.w(TAG, "gso signIn success: " + account.getIdToken());
Log.w(TAG, "gsa idToken: " + account.getIdToken());
JcSDK.nativeCb(this.mFunID, null, account.getIdToken()); JcSDK.nativeCb(this.mFunID, null, account.getIdToken());
// Signed in successfully, show authenticated UI. // Signed in successfully, show authenticated UI.
} catch (ApiException e) { } catch (ApiException e) {

View File

@ -28,6 +28,20 @@ public class OAuthLoginCbActivity extends Activity {
JcSDK.nativeCb(state, error, null); JcSDK.nativeCb(state, error, null);
} else { } else {
String token = uri.getQueryParameter("token"); String token = uri.getQueryParameter("token");
// if token is null, get token and state from uri fragment
if (null == token || "undefined".equals(token) || token.isEmpty()){
String fragment = uri.getFragment();
String[] vals = fragment.split("&");
for (String val : vals) {
if (val.startsWith("token=")) {
token = val.substring(6);
} else if (val.startsWith("id_token=")) {
token = val.substring(9);
} else if (val.startsWith("state=")) {
state = val.substring(6);
}
}
}
JcSDK.nativeCb(state, null, token); JcSDK.nativeCb(state, null, token);
} }
Intent intentMain = new Intent(this, MainActivity.class); Intent intentMain = new Intent(this, MainActivity.class);