Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 来自本机的Google服务帐户身份验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在我的本机应用中使用服务帐户身份验证,以便让人们更新电子表格而无需他们登录到他们的Google帐户.

我很失落如何去做,因为我看到的所有前端代码都与传统的oauth2登录有关.

任何的想法?

@L_696_3@

我终于放弃了服务帐户的想法并使用了客户端oauth.

我依赖于以下React Native库:https://github.com/joonhocho/react-native-google-sign-in

这是我的身份验证服务(简化,基于redux redux thunk):

// <project_folder>/src/services/auth.js
import GoogleSignIn from 'react-native-google-sign-in';
import { store } from '../store';
import auth from '../actions/auth';

export default () => {
    GoogleSignIn.configure({
        // https://developers.google.com/identity/protocols/googlescopes
        scopes: ['https://www.googleapis.com/auth/spreadsheets'],clientID: 'XXXXXXXXXXXXXXXXX.apps.googleusercontent.com',}).then(() => {
        GoogleSignIn.signInPromise().then((user) => {
            store.dispatch(auth(user.accessToken));
        }).catch((err) => {
            console.log(err);
        });
    }).catch((err) => {
        console.log(err);
    });
};

那么我在我的redux商店中有user.accessToken,可以在别处使用它来创建对google工作表API的REST请求.

下面是一个处理auth然后从工作表中检索一些数据的组件的简单示例:

// <project_folder>/src/main.js
import React,{ Component } from 'react';
import {
    ActivityInDicator,Text,View,StyleSheet,} from 'react-native';
import { connect } from 'react-redux';
import auth from './services/auth';
import Sheet from './services/sheet';

const styles = StyleSheet.create({
    container: {
        flex: 1,justifyContent: 'center',alignItems: 'center',BACkgroundColor: '#F5FCFF',},});

const sheetId = 'XX-XXXXXX_XXX_XXXXXXXXXXXXXXXXXXXXXX';


class Main extends Component {
    constructor(props) {
        super(props);
        this.state = {
            animaTing: true,};
    }

    componentDidMount() {
        auth();
    }

    componentWillupdate(nextProps) {
        if (this.props.token !== nextProps.token) this.setState({ animaTing: false });
    }

    componentDidupdate(nextProps) {
        this.sheet = new Sheet(id,this.props.token);
        this.sheet.getDoc();
    }

    render() {
        return (
            <View style={styles.container}>
                <ActivityInDicator
                    animaTing={this.state.animaTing}
                    style={{ height: 80 }}
                    size="large"
                />
                {!this.state.animaTing &&
                    <Text>
                        {this.props.namE}
                    </Text>
                }
            </View>
        );
    }
}

const mapStateToProps = (statE) => {
    return {
        token: state.auth.get('token'),name: state.sheet.get('name'),};
};

export default connect(mapStateToProps)(Main);

这是一个读/写表单的基本服务:

// <project_folder>/services/sheet.js
import { store } from '../store';
import {
    nameGet,valueGet,valuePost,}
from '../actions/sheet';

class Sheet {
    constructor(id,token) {
        this.id = id;
        this.token = token;
        this.endPoint = `https://sheets.googleapis.com/v4/spreadsheets/${this.iD}`;
    }

    getDoc() {
        fetch(`${this.endPoint}?access_token=${this.token}`).then((responsE) => {
            response.json().then((data) => {
                console.log(data);
                store.dispatch(nameGet(data.properties.titlE));
            });
        });
    }

    getCell(sheet,cell) {
        const range = `${sheet}!${Cell}`;
        fetch(`${this.endPoint}/values/${rangE}?access_token=${this.token}`)
        .then((responsE) => {
            response.json()
            .then((data) => {
                console.log(data);
                store.dispatch(valueGet(data.values[0][0]));
            })
            .catch((err) => {
                console.log(err);
            });
        })
        .catch((err) => {
            console.log(err);
        });
    }


    writeCell(sheet,cell,value) {
        const range = `${sheet}!${Cell}`;
        const body = JSON.Stringify({ values: [[value]] });
        fetch(
            `${this.endPoint}/values/${rangE}?valueInputOption=user_ENTERED&access_token=${this.token}`,{
                method: 'PUT',headers: {
                    'Content-Type': 'application/json'
                },body,}
        )
        .then((responsE) => {
            response.json()
            .then((data) => {
                console.log(data);
                store.dispatch(valuePost('OK'));
            })
            .catch((err) => {
                console.log(err);
            });
        })
        .catch((err) => {
            console.log(err);
        });
    }
}

export default Sheet;

如果有更好的方法,请告诉我.

大佬总结

以上是大佬教程为你收集整理的android – 来自本机的Google服务帐户身份验证全部内容,希望文章能够帮你解决android – 来自本机的Google服务帐户身份验证所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。