diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml index 4b30c8f..fdf150e 100644 --- a/app/AndroidManifest.xml +++ b/app/AndroidManifest.xml @@ -14,7 +14,6 @@ - @@ -47,6 +46,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/com/cege/games/release/Constants.java b/app/src/com/cege/games/release/Constants.java index bc7865e..8d489f7 100644 --- a/app/src/com/cege/games/release/Constants.java +++ b/app/src/com/cege/games/release/Constants.java @@ -2,4 +2,11 @@ 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"; + } diff --git a/app/src/com/cege/games/release/MainActivity.java b/app/src/com/cege/games/release/MainActivity.java index e9b2309..e5b5028 100644 --- a/app/src/com/cege/games/release/MainActivity.java +++ b/app/src/com/cege/games/release/MainActivity.java @@ -1,7 +1,6 @@ package com.cege.games.release; import android.Manifest; -import android.app.AlertDialog; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -14,8 +13,6 @@ import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.Window; -import android.webkit.WebView; -import android.webkit.WebViewClient; import android.widget.Toast; import com.bytedance.sdk.open.tiktok.TikTokOpenApiFactory; @@ -23,6 +20,7 @@ import com.bytedance.sdk.open.tiktok.api.TikTokOpenApi; import com.bytedance.sdk.open.tiktok.authorize.model.Authorization; import com.cege.games.release.activity.CustomCaptureActivity; import com.cege.games.release.activity.WebPageActivity; +import com.cege.games.release.apple.AppleLoginActivity; import com.cege.games.release.dialog.QRCodeActivity; import com.facebook.AccessToken; import com.facebook.CallbackManager; @@ -878,6 +876,16 @@ public class MainActivity extends UnityPlayerActivity } } + public void signWithApple(String funId) { + this.funId = 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(() -> { Log.i(TAG, "show page: " + url); diff --git a/app/src/com/cege/games/release/apple/AppleLoginActivity.java b/app/src/com/cege/games/release/apple/AppleLoginActivity.java new file mode 100644 index 0000000..986d2bb --- /dev/null +++ b/app/src/com/cege/games/release/apple/AppleLoginActivity.java @@ -0,0 +1,80 @@ +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); +// } + }); + } + +} diff --git a/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java b/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java new file mode 100644 index 0000000..cbd0dd1 --- /dev/null +++ b/app/src/com/cege/games/release/apple/AppleLoginCbActivity.java @@ -0,0 +1,34 @@ +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(); + } + } +} diff --git a/app/src/com/jc/jcfw/JcSDK.java b/app/src/com/jc/jcfw/JcSDK.java index 2d47625..22e32e8 100644 --- a/app/src/com/jc/jcfw/JcSDK.java +++ b/app/src/com/jc/jcfw/JcSDK.java @@ -94,6 +94,9 @@ public class JcSDK { public static void signWithGoogle(String funid) { MainActivity.app.signWithGoogle(funid); } + public static void signWithApple(String funid) { + MainActivity.app.signWithApple(funid); + } public static void signOutGoogle(String funid) { MainActivity.app.signOutGoogle(funid);