修改discord登录代码, 改为通用的oauth登录

This commit is contained in:
CounterFire2023 2024-01-25 12:17:42 +08:00
parent f64790f41d
commit 9337b84631
9 changed files with 83 additions and 190 deletions

File diff suppressed because one or more lines are too long

View File

@ -176,25 +176,9 @@
android:launchMode="singleTask"
android:taskAffinity="com.cege.games.release"
android:exported="true" />
<activity
android:name=".apple.AppleLoginActivity"
android:theme="@style/WebViewTheme" />
<activity
android:name=".apple.AppleLoginCbActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="cebg"
android:path="/apple_login_result" />
</intent-filter>
</activity>
<activity
android:name=".discord.DiscordLoginCbActivity"
android:name=".oauth.OAuthLoginCbActivity"
tools:node="replace"
android:exported="true">
<intent-filter>
@ -204,8 +188,8 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="cebgdiscordcb"
android:path="/discord_login_result" />
android:scheme="cfoauthcb"
android:path="/login_result" />
</intent-filter>
</activity>
<activity

View File

@ -2,18 +2,5 @@ package com.cege.games.release;
public class Constants {
public static final String PREF_NAME = "jcwallet";
public static final String APPLE_CLIENT_ID = "wallet.cebggame.com";
public static final String APPLE_REDIRECT_URI = "https://wallet.cebggame.com/apple/oauth_redirect";
public static final String APPLE_SCOPE = "name%20email";
public static final String APPLE_AUTH_URL = "https://appleid.apple.com/auth/authorize";
public static final String FUNID_PREFIX = "webpage_";
public static final String DISCORD_CLIENT_ID = "1199290913155981345";
// public static final String DISCORD_REDIRECT_URI= "https://oauth-svr.cebggame.com/test/discord/oauth_redirect";
public static final String DISCORD_REDIRECT_URI= "https://wallet.cebggame.com/discord/oauth_redirect";
public static final String DISCORD_SCOPE = "email identify";
}

View File

@ -2,9 +2,6 @@ package com.cege.games.release;
import static androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_STRONG;
import static androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL;
import static com.cege.games.release.Constants.DISCORD_CLIENT_ID;
import static com.cege.games.release.Constants.DISCORD_REDIRECT_URI;
import static com.cege.games.release.Constants.DISCORD_SCOPE;
import static org.cocos2dx.lib.Cocos2dxHelper.getActivity;
import android.content.Intent;
@ -29,7 +26,7 @@ import com.bytedance.sdk.open.tiktok.base.VideoObject;
import com.bytedance.sdk.open.tiktok.share.Share;
import com.cege.games.release.activity.WebPageActivity;
import com.cege.games.release.appauth.AppAuthSvr;
import com.cege.games.release.apple.AppleLoginActivity;
import com.cege.games.release.oauth.OAuthUtil;
import com.cege.games.release.ui.UIManager;
import com.cege.games.release.wallet.WalletUtil;
import com.facebook.AccessToken;
@ -90,8 +87,6 @@ public class MainActivity extends UnityPlayerActivity
// code for request drive to download
private static final int RC_REQUEST_DRIVE_TO_READ = 0X052;
private static final int RC_DISCORD_LOGIN = 0X053;
public static final int FILE_SELECTOR_CODE = 0X014;
private String title;
@ -115,6 +110,7 @@ public class MainActivity extends UnityPlayerActivity
private FirebaseAnalytics mFirebaseAnalytics;
private AppEventsLogger fbLogger;
private WalletUtil mWalletUtil;
private OAuthUtil mOAuthUtil;
public boolean isGooglePlayServicesAvailable() {
return GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this) == ConnectionResult.SUCCESS;
@ -387,26 +383,15 @@ public class MainActivity extends UnityPlayerActivity
this.mFunID = funId;
}
public void signWithDiscord(String funId) {
AuthorizationServiceConfiguration config = new AuthorizationServiceConfiguration(
Uri.parse("https://discord.com/api/oauth2/authorize"),
Uri.parse("")
);
AuthorizationRequest.Builder authRequestBuilder = new AuthorizationRequest.Builder(
config,
DISCORD_CLIENT_ID,
ResponseTypeValues.CODE,
Uri.parse(DISCORD_REDIRECT_URI)
);
String[] scopes = DISCORD_SCOPE.split(" +");
AuthorizationRequest authRequest = authRequestBuilder
.setScopes(scopes)
.setCodeVerifier(null, null, null)
.setState(funId)
.build();
AuthorizationService service = new AuthorizationService(this);
Intent authIntent = service.getAuthorizationRequestIntent(authRequest);
startActivityForResult(authIntent, RC_DISCORD_LOGIN);
public void oauthLogin(String funId, String jsonData) {
if (this.mOAuthUtil == null) {
this.mOAuthUtil = new OAuthUtil(this);
}
try {
this.mOAuthUtil.startLogin(funId, jsonData);
} catch (JSONException e) {
JcSDK.nativeCb(funId, e.getMessage(), null);
}
}
public void logEvent(String content) {
@ -422,16 +407,6 @@ public class MainActivity extends UnityPlayerActivity
}
}
public void signWithApple(String funId) {
this.mFunID = funId;
Log.i(TAG, "login with apple: " + funId);
runOnUiThread(() -> {
Intent intent = new Intent(this, AppleLoginActivity.class);
intent.putExtra("funId", funId);
startActivity(intent);
});
}
public void showPage(String fid, final String url) {
runOnUiThread(() -> {
Intent intent = new Intent(this, WebPageActivity.class);

View File

@ -1,80 +0,0 @@
package com.cege.games.release.apple;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Rect;
import android.net.Uri;
import android.util.Log;
import android.view.ViewGroup;
import android.view.Window;
import android.webkit.CookieManager;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.cege.games.release.Constants;
import com.cege.games.release.R;
public class AppleLoginActivity extends Activity {
private static final String TAG = AppleLoginActivity.class.getSimpleName();
@SuppressLint("SetJavaScriptEnabled")
@Override
public void onCreate(android.os.Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
setContentView(R.layout.activity_web_page);
WebView.setWebContentsDebuggingEnabled(true);
WebView mWebView = findViewById(R.id.web_view);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAppCacheEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
CookieManager.getInstance().setAcceptThirdPartyCookies(mWebView,true);
// get url from intent
String funId = intent.getStringExtra("funId");
String url = Constants.APPLE_AUTH_URL
+ "?response_type=code%20id_token&v=1.1.6&response_mode=form_post&client_id="
+ Constants.APPLE_CLIENT_ID + "&scope=" + Constants.APPLE_SCOPE + "&state=" + funId + "&redirect_uri="
+ Constants.APPLE_REDIRECT_URI;
// show web view
mWebView.loadUrl(url);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
Log.i(TAG, url);
if (url.startsWith("cebg")) {
// Close the dialog after getting the authorization code
Intent myapp_intent = new Intent(Intent.ACTION_VIEW);
myapp_intent.setData(Uri.parse(url));
startActivity(myapp_intent);
finish();
return true;
}
return false;
}
// @Override
// public void onPageFinished(WebView view, String url) {
// super.onPageFinished(view, url);
// Rect displayRectangle = new Rect();
// Window window = getWindow();
// window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
// ViewGroup.LayoutParams layoutparms = view.getLayoutParams();
// layoutparms.height = displayRectangle.height();
// layoutparms.width = displayRectangle.width();
// view.setLayoutParams(layoutparms);
// }
});
}
}

View File

@ -1,34 +0,0 @@
package com.cege.games.release.apple;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.jc.jcfw.JcSDK;
public class AppleLoginCbActivity extends Activity {
private static final String TAG = AppleLoginCbActivity.class.getSimpleName();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "receive apple login callback");
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
String error = uri.getQueryParameter("error");
String state = uri.getQueryParameter("state");
if (null != error && !error.isEmpty()) {
JcSDK.nativeCb(state, error, null);
} else {
String token = uri.getQueryParameter("token");
JcSDK.nativeCb(state, null, token);
}
finish();
}
}
}

View File

@ -1,4 +1,4 @@
package com.cege.games.release.discord;
package com.cege.games.release.oauth;
import android.app.Activity;
import android.content.Intent;
@ -11,13 +11,13 @@ import androidx.annotation.Nullable;
import com.cege.games.release.MainActivity;
import com.jc.jcfw.JcSDK;
public class DiscordLoginCbActivity extends Activity{
private static final String TAG = DiscordLoginCbActivity.class.getSimpleName();
public class OAuthLoginCbActivity extends Activity {
private static final String TAG = OAuthLoginCbActivity.class.getSimpleName();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "receive discord login callback");
Log.d(TAG, "receive oauth login callback");
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {

View File

@ -0,0 +1,61 @@
package com.cege.games.release.oauth;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import net.openid.appauth.AuthorizationRequest;
import net.openid.appauth.AuthorizationService;
import net.openid.appauth.AuthorizationServiceConfiguration;
import org.json.JSONException;
import org.json.JSONObject;
public class OAuthUtil {
private final Activity mActivity;
public OAuthUtil(Activity activity) {
this.mActivity = activity;
}
/**
*
* @param funId
* @param jsonData: {
* "endpoint": "",
* "client_id": "",
* "redirect_uri": "",
* "response_type": "code",
* "response_mode": "form_post", nullable
* "scopes": "",
* }
* @throws JSONException
*/
public void startLogin(String funId, String jsonData) throws JSONException {
JSONObject data = new JSONObject(jsonData);
AuthorizationServiceConfiguration config = new AuthorizationServiceConfiguration(
Uri.parse(data.getString("endpoint")),
Uri.parse("")
);
AuthorizationRequest.Builder authRequestBuilder = new AuthorizationRequest.Builder(
config,
data.getString("client_id"),
data.getString("response_type"),
Uri.parse(data.getString("redirect_uri"))
);
String[] scopes = data.getString("scopes").split(" +");
if (data.has("response_mode")) {
authRequestBuilder.setResponseMode(data.getString("response_mode"));
}
AuthorizationRequest authRequest = authRequestBuilder
.setScopes(scopes)
.setCodeVerifier(null, null, null)
.setState(funId)
.setNonce(funId)
.build();
AuthorizationService service = new AuthorizationService(this.mActivity);
Intent authIntent = service.getAuthorizationRequestIntent(authRequest);
this.mActivity.startActivity(authIntent);
}
}

View File

@ -129,11 +129,11 @@ public class JcSDK {
}
public static void signWithApple(String funid) {
MainActivity.app.signWithApple(funid);
// MainActivity.app.signWithApple(funid);
}
public static void signWithDiscord(String funid) {
MainActivity.app.signWithDiscord(funid);
public static void signWithOAuth(String funid, String jsonData) {
MainActivity.app.oauthLogin(funid, jsonData);
}
public static void signOutGoogle(String funid) {