WalteE
WalteE
  • 发布:2022-11-08 11:44
  • 更新:2022-11-08 12:36
  • 阅读:94

一键登录在ios真机调试时无法使用。

分类:uni-app

问题描述:
在uniapp中配置了一键登录,在ios的真机调试中无法调用,不知道是不是sdk没有打包进去。一键登录已经在DCloud开通了,但是应用还在审核中。

一、运行到手机 ---> ios模拟器的标准底座没有提示报错。但是提示网络环境不支持。
二、使用真机调试时无法使用。具体代码和返回结果如下。

1、调用:uni.preLogin
返回:
{code: 0,errMsg: "preLogin:fail provider not find"}

代码:

uni.preLogin({  
    provider: 'univerify',  
    success: (res) => {  
    console.log(res, 'preLogin success')  
    },  
    fail: (res) => {  
      console.log("preLogin fail res: ", res);  
    }  
})

2、调用:uni.getProvider
返回:['weixin']
代码:

uni.getProvider({  
    service: 'oauth',  
    success: function(res) {  
        console.log(res.provider)   
    }  
});

3、调用:uni.login,provider为univerify
返回:{errCode: undefined, errMSG:'login:fail provider not find'}
代码:

uni.login({  
                    provider: 'univerify',  
                    univerifyStyle: {  
                        fullScreen: true  
                    },  
                    success(res) { // 登录成功  
                        uniCloud.callFunction({  
                            name: 'getPhoneNumber', // 你的云函数名称  
                            data: {  
                                'access_token': res.authResult.access_token,   
                                'openid': res.authResult.openid   
                            }  
                        }).then(res => {  
                            console.log(res, 'phone')  
                            // 登录成功,可以关闭一键登录授权界面了  
                        }).catch(err => {  
                            // 处理错误  
                        })  

                    },  
                    fail(res) { // 登录失败  
                        console.log(res.errCode)  
                        console.log(res.errMsg)  
                    }  
                })
2022-11-08 11:44 负责人:无 分享
已邀请:
DCloud_iOS_XHY

DCloud_iOS_XHY

制作自定义基座后勾选自定义基座运行

  • WalteE (作者)

    谢谢,解决了这个问题。再重现制作自定义基座后,调用可以弹出手机号授权界面了。

    2022-11-08 12:30

  • WalteE (作者)

    能在请教一个问题么,一键登录获取到access_token和openid后。通过uniCloud.callFunction调用云函数,catch到了下方错误


    B: [getPhoneNumber]: request:ok

    at Function.complete (http://172.20.10.8:8091/source/file:///var/mobile/Containers/Data/Application/3B93D6D3-90A7-41B1-9D52-99DC344733D3/Documents/Pandora/apps/AD2A1F49E6D1A7A8E128F906E2643444/www/pages/login/index.js:1076:21)

    at

    at Object.So._e [as callback] ()

    at $o ()

    at Ji ()

    at resolve ()

    at ln ()

    at of.consume ()

    at Lc.callback ()

    at eN () "err" "uni-app:///pages/login/index.nvue:99"

    2022-11-08 12:33

  • DCloud_云服务_moyang

    回复 WalteE: 这个问题目前还存在吗?提供一个报错的云函数日志内容我查查

    2022-11-08 16:51

  • WalteE (作者)

    回复 DCloud_云服务_moyang: 你好,没有日志记录。好像是在前端就已经报错了没有调用成功。但是运营商授权的页面已经弹出来了。点击一键登录后报这个错。在一键登录也添加了这个应用,审核通过了。

    2022-11-08 19:11

WalteE

WalteE (作者)

这是我的云函数代码
index.js

'use strict';  
exports.main = async (event, context) => {  
    // event里包含着客户端提交的参数  
    const res = await uniCloud.getPhoneNumber({  
        appid: '__UNI__5058F31', // 替换成自己开通一键登录的应用的DCloud appid  
        provider: 'univerify',  
        apiKey: 'xxx', // 在开发者中心开通服务并获取apiKey  
        apiSecret: 'xxx', // 在开发者中心开通服务并获取apiSecret  
        access_token: event.access_token,  
        openid: event.openid  
    })  

    console.log(res); // res里包含手机号  
    // 执行用户信息入库等操作,正常情况下不要把完整手机号返回给前端  
    // 如果数据库在uniCloud上,可以直接入库  
    // 如果数据库不在uniCloud上,可以通过 uniCloud.httpclient API,将手机号通过http方式传递给其他服务器的接口,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-functions?id=httpclient  
    return {  
        code: 0,  
        message: '获取手机号成功',  
        data: res  
    }  
}  

package.json

{  
  "name": "getPhoneNumber",  
  "dependencies": {},  
  "extensions": {  
    "uni-cloud-verify": {}  
  }  
}  

app端调用
uniCloud.callFunction({
name: 'getPhoneNumber', // 你的云函数名称
data: {
'access_token': res.authResult.access_token,
'openid': res.authResult.openid // 客户端一键登录接口返回的openid
}
}).then(res => console.log(res)).catch(err => console.log(err))

要回复问题请先登录注册