java后端-海外登录(谷歌/FaceBook/苹果)

前言

        由于最近公司的项目要在海外运行,因此需要对接海外的登录,目前就是谷歌和facebook两种,后面支付也是需要的,后续再进行书写

谷歌登录

        这个相对比较容易,而且只提供给安卓即可,废话就不多说了,直接贴解决方案

引入maven依赖

<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.35.2</version>
</dependency>
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client-android</artifactId>
    <version>1.35.2</version>
</dependency>
<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-java6</artifactId>
    <version>1.33.0</version>
</dependency>
<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.33.0</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-oauth2</artifactId>
    <version>v2-rev20200213-2.0.0</version>
</dependency>

工具类
@Slf4j
public class IdTokenVerifier {

    //安卓信息

    private static final String CLIENT_ID = Constants.GOOGLE_APPLE_ID; // 替换为你的 Android 客户端 ID

    public static GoogleIdToken.Payload verifyToken(String idTokenString) throws GeneralSecurityException, IOException {
        NetHttpTransport transport = new NetHttpTransport();
        GsonFactory jsonFactory = new GsonFactory();

        GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
                .setAudience(Collections.singletonList(CLIENT_ID))
                .build();

        GoogleIdToken idToken = verifier.verify(idTokenString);


        if (idToken != null) {
            log.info("verifyToken-返回的数据为{}", JsonUtils.Object2Json(idToken));
            return idToken.getPayload();
        } else {
            // 无效的 ID token
            log.info("verifyToken-返回的数据为null");
            return null;
        }
    }

    public static boolean checkNonce(String nonce, GoogleIdToken.Payload payload) {
        if(payload == null) {
            return false;
        }
        Object
字符串“/my_product/del-app-pre/Facebook”与 `apkFiles.removeAll(updatedApkPaths)` 未移除数据的问题可能存在以下几种关联情况: ### 大小写问题 若 `apkFiles` 或 `updatedApkPaths` 中包含该字符串,且大小写不一致,就会导致 `removeAll` 方法无法正确识别并移除。例如,`apkFiles` 中有 `/my_product/del-app-pre/Facebook`,而 `updatedApkPaths` 中是 `/my_product/del-app-pre/facebook`,这种大小写差异会使移除操作失败[^1]。 ```java import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class CaseSensitiveCheck { public static void main(String[] args) { List<String> apkFiles = new ArrayList<>(); apkFiles.add("/my_product/del-app-pre/Facebook"); Set<String> updatedApkPaths = new HashSet<>(); updatedApkPaths.add("/my_product/del-app-pre/facebook"); apkFiles.removeAll(updatedApkPaths); System.out.println(apkFiles); // 输出: [/my_product/del-app-pre/Facebook] } } ``` ### 额外空白字符问题 如果该字符串在 `apkFiles` 或 `updatedApkPaths` 中包含额外的空白字符,同样会影响移除操作。比如,`apkFiles` 里是 `/my_product/del-app-pre/Facebook `(末尾有空格),而 `updatedApkPaths` 中是 `/my_product/del-app-pre/Facebook`,就无法移除[^1]。 ```java import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class WhitespaceCheck { public static void main(String[] args) { List<String> apkFiles = new ArrayList<>(); apkFiles.add("/my_product/del-app-pre/Facebook "); Set<String> updatedApkPaths = new HashSet<>(); updatedApkPaths.add("/my_product/del-app-pre/Facebook"); apkFiles.removeAll(updatedApkPaths); System.out.println(apkFiles); // 输出: [/my_product/del-app-pre/Facebook ] } } ``` ### 并发修改问题 若在执行 `removeAll` 方法时,该字符串所在的集合被其他线程修改,可能会导致移除失败。例如,在执行移除操作时,另一个线程向 `apkFiles` 中添加了包含该字符串的元素[^1]。 ### 自定义集合实现问题 如果使用了自定义的集合实现,且没有正确实现 `equals` 和 `hashCode` 方法,包含该字符串的元素可能无法被正确识别和移除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值