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);