增加facebook登录

This commit is contained in:
zhl 2023-02-08 15:02:00 +08:00
parent e26450ec99
commit b06c742f4d
4 changed files with 107 additions and 15 deletions

File diff suppressed because one or more lines are too long

View File

@ -15,6 +15,8 @@
<!-- Tell Cocos2dxActivity the name of our .so --> <!-- Tell Cocos2dxActivity the name of our .so -->
<meta-data android:name="android.app.lib_name" <meta-data android:name="android.app.lib_name"
android:value="cocos2djs" /> android:value="cocos2djs" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="com.cege.games.release.provider" android:authorities="com.cege.games.release.provider"
@ -35,7 +37,6 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
</activity> </activity>
<activity <activity
@ -76,6 +77,20 @@
android:name=".tiktokapi.TikTokEntryActivity" android:name=".tiktokapi.TikTokEntryActivity"
android:exported="true"> android:exported="true">
</activity> </activity>
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
<activity
android:name="com.facebook.CustomTabActivity"
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="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<service android:name ="com.youme.voiceengine.VoiceEngineService" <service android:name ="com.youme.voiceengine.VoiceEngineService"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
@ -83,8 +98,6 @@
<category android:name="android.intent.category.default"/> <category android:name="android.intent.category.default"/>
</intent-filter> </intent-filter>
</service> </service>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
</application> </application>
<supports-screens <supports-screens
android:anyDensity="true" android:anyDensity="true"
@ -128,9 +141,10 @@
<uses-permission <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="29" /> android:maxSdkVersion="29" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
<queries> <queries>
<package android:name="com.zhiliaoapp.musically" /> <package android:name="com.zhiliaoapp.musically" />
<package android:name="com.ss.android.ugc.trill" /> <package android:name="com.ss.android.ugc.trill" />
<provider android:authorities="com.facebook.katana.provider.PlatformProvider" /> <!-- allows app to access Facebook app features -->
<provider android:authorities="com.facebook.orca.provider.PlatformProvider" /> <!-- allows sharing to Messenger app -->
</queries> </queries>
</manifest> </manifest>

View File

@ -1,19 +1,16 @@
package com.cege.games.release; package com.cege.games.release;
import android.Manifest; import android.Manifest;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.provider.MediaStore; import android.provider.MediaStore;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent;
import android.view.Window; import android.view.Window;
import android.widget.Toast; import android.widget.Toast;
@ -22,6 +19,13 @@ import com.bytedance.sdk.open.tiktok.api.TikTokOpenApi;
import com.bytedance.sdk.open.tiktok.authorize.model.Authorization; import com.bytedance.sdk.open.tiktok.authorize.model.Authorization;
import com.cege.games.release.activity.CustomCaptureActivity; import com.cege.games.release.activity.CustomCaptureActivity;
import com.cege.games.release.dialog.QRCodeActivity; import com.cege.games.release.dialog.QRCodeActivity;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.auth.api.signin.GoogleSignInClient;
@ -59,6 +63,7 @@ import net.openid.appauth.browser.BrowserMatcher;
import org.cocos2dx.lib.Cocos2dxHelper; import org.cocos2dx.lib.Cocos2dxHelper;
import org.cocos2dx.lib.CocosJSHelper; import org.cocos2dx.lib.CocosJSHelper;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
@ -82,7 +87,6 @@ public class MainActivity extends UnityPlayerActivity
private static final String TAG = MainActivity.class.getSimpleName(); private static final String TAG = MainActivity.class.getSimpleName();
public static MainActivity app; public static MainActivity app;
// protected UnityPlayer mUnityPlayer;
private Toast toast; private Toast toast;
public static final String KEY_TITLE = "key_title"; public static final String KEY_TITLE = "key_title";
@ -127,7 +131,8 @@ public class MainActivity extends UnityPlayerActivity
private final BrowserMatcher mBrowserMatcher = AnyBrowserMatcher.INSTANCE; private final BrowserMatcher mBrowserMatcher = AnyBrowserMatcher.INSTANCE;
private GoogleSignInClient mGoogleSignInClient; private GoogleSignInClient mGoogleSignInClient;
// facebook login
private CallbackManager mCallbackManager;
protected String updateUnityCommandLineArguments(String cmdLine) { protected String updateUnityCommandLineArguments(String cmdLine) {
return cmdLine; return cmdLine;
@ -161,11 +166,16 @@ public class MainActivity extends UnityPlayerActivity
mConfiguration = JConfiguration.getInstance(this); mConfiguration = JConfiguration.getInstance(this);
mExecutor.submit(this::initializeAppAuth); mExecutor.submit(this::initializeAppAuth);
// end of google oauth sign // end of google oauth sign
// begin of facebook login
initFacebookSDK();
// end of facebook login
} }
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK && data!=null){ if(resultCode == RESULT_OK && data!=null){
switch (requestCode){ switch (requestCode){
case REQUEST_CODE_SCAN: case REQUEST_CODE_SCAN:
@ -434,7 +444,7 @@ public class MainActivity extends UnityPlayerActivity
} else { } else {
Log.w(TAG, "already login, accessToken not expired"); Log.w(TAG, "already login, accessToken not expired");
Log.w(TAG, "id token : " + state.getIdToken()); Log.w(TAG, "id token : " + state.getIdToken());
runOnUiThread(() -> verifyGoogleIDToken(state.getIdToken())); runOnUiThread(() -> successSdkCb(state.getIdToken()));
} }
} else { } else {
mExecutor.submit(this::doAuth); mExecutor.submit(this::doAuth);
@ -454,7 +464,7 @@ public class MainActivity extends UnityPlayerActivity
GoogleSignInAccount account = completedTask.getResult(ApiException.class); GoogleSignInAccount account = completedTask.getResult(ApiException.class);
Log.w(TAG, "signIn success: "); Log.w(TAG, "signIn success: ");
Log.w(TAG, "gsa idToken: " + account.getIdToken()); Log.w(TAG, "gsa idToken: " + account.getIdToken());
runOnUiThread(() -> verifyGoogleIDToken(account.getIdToken())); runOnUiThread(() -> successSdkCb(account.getIdToken()));
// Signed in successfully, show authenticated UI. // Signed in successfully, show authenticated UI.
} catch (ApiException e) { } catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason. // The ApiException status code indicates the detailed failure reason.
@ -710,14 +720,19 @@ public class MainActivity extends UnityPlayerActivity
Log.d(TAG, "login success, auth state: " + state.isAuthorized()); Log.d(TAG, "login success, auth state: " + state.isAuthorized());
Log.d(TAG, "app auth idToken: " + state.getIdToken()); Log.d(TAG, "app auth idToken: " + state.getIdToken());
mAuthStateManager.replace(state); mAuthStateManager.replace(state);
runOnUiThread(() -> verifyGoogleIDToken(state.getIdToken())); runOnUiThread(() -> successSdkCb(state.getIdToken()));
} }
} }
@MainThread @MainThread
private void verifyGoogleIDToken(String idToken) { private void successSdkCb(String idToken) {
JcSDK.oauthCb(this.funId, null, idToken); JcSDK.oauthCb(this.funId, null, idToken);
} }
@MainThread
private void errorSdkCb(String errMsg) {
JcSDK.oauthCb(this.funId, errMsg, null);
}
// sign with tiktok // sign with tiktok
public void signWithTiktok(String funId) { public void signWithTiktok(String funId) {
this.funId = funId; this.funId = funId;
@ -754,4 +769,59 @@ public class MainActivity extends UnityPlayerActivity
toast.show(); toast.show();
}); });
} }
// begin of facebook login
private void initFacebookSDK() {
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
AccessToken accessToken = AccessToken.getCurrentAccessToken();
Log.d(TAG, "Login Success:: accessToken: " + accessToken.getToken());
if (!verifyFbAccessToken(accessToken)) {
runOnUiThread(() -> errorSdkCb("access token expired"));
}
}
@Override
public void onCancel() {
Log.d(TAG, "Login cancel");
runOnUiThread(() -> errorSdkCb("user login cancel"));
}
@Override
public void onError(FacebookException exception) {
Log.i(TAG, "Login error: " + exception.getMessage());
runOnUiThread(() -> errorSdkCb(exception.getMessage()));
}
});
}
public void signWithFacebook(String funId) {
Log.i(TAG, "login with facebook: " + funId);
this.funId = funId;
AccessToken accessToken = AccessToken.getCurrentAccessToken();
Log.d("Success", "Login:: accessToken: " + accessToken.getToken());
if (!verifyFbAccessToken(accessToken)) {
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));
}
// AccessToken.getCurrentAccessToken();
}
private boolean verifyFbAccessToken(AccessToken accessToken) {
boolean isLoggedIn = accessToken != null && !accessToken.isExpired();
if (isLoggedIn) {
runOnUiThread(() -> successSdkCb(accessToken.getToken()));
return true;
} else {
return false;
}
}
// end of facebook login
public void signWithTwitter(String funId) {
Log.i(TAG, "login with twitter: " + funId);
this.funId = funId;
}
} }

View File

@ -80,6 +80,14 @@ public class JcSDK {
MainActivity.app.signWithTiktok(funid); MainActivity.app.signWithTiktok(funid);
} }
public static void signWithFacebook(String funid) {
MainActivity.app.signWithFacebook(funid);
}
public static void signWithTwitter(String funid) {
MainActivity.app.signWithTwitter(funid);
}
public static void signWithGoogle(String funid) { public static void signWithGoogle(String funid) {
MainActivity.app.signWithGoogle(funid); MainActivity.app.signWithGoogle(funid);
} }