uni-app 一键登录问题:从一个AppID通过在线更新到新AppID后,首次登录获取的token是旧的

uni-app 一键登录问题:从一个AppID通过在线更新到新AppID后,首次登录获取的token是旧的

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 macOS 12.6.3
HBuilderX类型 正式
HBuilderX版本 4.0
手机系统 Android
手机系统版本 Android 10
手机厂商 OPPO
手机机型 OPPO R17
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

由于公司有一个AppID与uni官方签了广告授权,所以现在要把App的AppID换成授权的那个AppID ,通过在线更新是可以做到更新,但是第一次更新完成后,一键登录时,获取到的UniAppID是新的 openid也是新的,旧是token是旧的,为什么是新的,因为我拿旧的AppID 和旧的openid去检验能得到正确的手机号,所以才知道token是旧的。

预期结果:

换了AppID,那么去调用uni.login时返回的openid和token希望都是新的,能够检验出正确的手机号

实际结果:

token是旧的

bug描述:

由于公司有一个AppID与uni官方签了广告授权,所以现在要把App的AppID换成授权的那个AppID ,通过在线更新是可以做到更新,但是第一次更新完成后,一键登录时,获取到的UniAppID是新的 openid也是新的,旧是token是旧的,为什么是新的,因为我拿旧的AppID 和旧的openid去检验能得到正确的手机号,所以才知道token是旧的。现在的问题是,换了AppID,那么去调用uni.login时返回的openid和token希望都是新的,能够检验出正确的手机号


更多关于uni-app 一键登录问题:从一个AppID通过在线更新到新AppID后,首次登录获取的token是旧的的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

是整包更新吧,更新完之后重启下项目 platForm 获取平台
if(platForm == ‘android’){

    plus.runtime.quit();  

}else if(platForm == ‘ios’){
const threadClass = plus.ios.importClass(“NSThread”);
const mainThread = plus.ios.invoke(threadClass, “mainThread”);

    plus.ios.invoke(mainThread, "exit");  
//上面的不行就用下面的  

    plus.ios.import("UIApplication").sharedApplication().performSelector("exit")  

}

更多关于uni-app 一键登录问题:从一个AppID通过在线更新到新AppID后,首次登录获取的token是旧的的实战教程也可以访问 https://www.itying.com/category-93-b0.html


app是有重启的,不是这个原因,现在已经找到原因了,是旧的Appid 启动时有调用 uni.preLogin 这里如果没有使用uni.login 那么预登录就会缓存10分钟,那问题来了,如果更新到新的AppID 那再调 uni.preLogin 是不会更新里面的信息的,所以第一次一键登录就会是旧的AppID 的token ,就算重启多次,在10分钟内没有调用uni.login那么就一直是旧的。所以这个应该是个推这个SDK有问题,如果需求是想做缓存,但是应该多一个可以清除上次的一个入口,这样就没问题了。希望官方可以改进

在 uni-app 中,如果你从一个 AppID 通过在线更新到新的 AppID 后,首次登录获取的 token 仍然是旧的,可能是由于以下几个原因导致的:

1. 缓存问题

  • 原因: 旧 AppID 的 token 可能被缓存了,导致首次登录时仍然使用旧的 token。
  • 解决方案: 清除缓存或者强制刷新 token。可以在更新 AppID 后,手动调用清除缓存的接口,或者在代码中强制刷新 token。
// 清除缓存示例
uni.clearStorageSync();

2. AppID 更新未生效

  • 原因: 更新 AppID 后,可能由于某些原因,新的 AppID 未生效。
  • 解决方案: 确保 AppID 已经成功更新,并且重新编译和运行应用。可以检查 manifest.json 文件中的 AppID 是否正确。
{
  "appid": "新AppID",
  "name": "YourApp"
}

3. 服务器端未同步

  • 原因: 服务器端可能仍然在使用旧的 AppID 进行验证,导致返回旧的 token。
  • 解决方案: 确保服务器端已经同步更新了新的 AppID,并且能够正确处理新 AppID 的请求。

4. 客户端未重新登录

  • 原因: 客户端在更新 AppID 后,可能未重新登录,导致仍然使用旧的 token。
  • 解决方案: 在更新 AppID 后,强制用户重新登录,以确保获取到新的 token。
// 强制用户重新登录示例
uni.reLaunch({
  url: '/pages/login/login'
});
回到顶部