当前位置: 首页 > 知识库问答 >
问题:

为什么我不能读取帐户信息?

公西星海
2023-03-14

我是完全新的Web API的,并试图建立一个Android应用程序观看谷歌联系人。我被Oauth的第一步卡住了。我已经完成了登录按钮和授权。按钮工作正常,我可以登录我的谷歌账户,但当我试图从这个账户获得一些东西时,日志猫打印了这个按摩“I/System_Server:oneway函数结果将被删除,但以状态OK和包裹大小结束”。为什么会这样?因为auth令牌不再有效?如何恢复权限?我应该如何从帐户获得信息?

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestServerAuthCode(clientID).requestEmail().requestScopes
                (new Scope("https://www.googleapis.com/auth/contacts "))
                .build();

        mSignInClient = GoogleSignIn.getClient(this, gso);

        signInButton = findViewById(R.id.sign_in_button);
        getInfoButton = findViewById(R.id.getInfo);
        signInButton.setSize(SignInButton.SIZE_STANDARD);

        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()){
                    case R.id.sign_in_button:
                        signIn();
                        break;
                }
            }
        });
    private void signIn(){
        Intent intent = mSignInClient.getSignInIntent();
        startActivityForResult(intent, RC_SIGN_IN);
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task =
                    GoogleSignIn.getSignedInAccountFromIntent(data);
            if (task.isSuccessful()) {
                GoogleSignInAccount acct = task.getResult();
                account = acct;
                handleSignInResult(task);
            } else {
            }
        }
    }

这是我如何从帐户中获取信息的:

    private void getAccountInfo(){
        GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(this);
        if (acct != null) {
            String personName = acct.getDisplayName();
            String personGivenName = acct.getGivenName();
            String personFamilyName = acct.getFamilyName();
            String personEmail = acct.getEmail();
            String personId = acct.getId();
            Uri personPhoto = acct.getPhotoUrl();
            Log.d(TAG, acct.getDisplayName());
            Log.d(TAG, personGivenName);
            Log.d(TAG, personFamilyName);
        }
    }

那么AccountManager呢?我应该用吗?我很高兴收到任何信息。

共有1个答案

司马项明
2023-03-14

访问用户配置文件数据不仅仅是从一个范围。您使用的是https://www.googleapis.com/auth/contacts,它只允许您访问查看、编辑、下载和永久删除联系人

例如,我认为https://www.googleapis.com/auth/userinfo.profile允许您访问它们的名称,而https://www.googleapis.com/auth/userinfo.email允许您访问电子邮件地址。

 类似资料:
  • 我正在最新版本(汇流5.5.1)中的AWS EC2实例上测试ksqldb,遇到了一个无法解决的访问问题。 我有一个安全的Kafka服务器(SASL_SSSL,SASL模式为普通),一个不安全的模式注册表(Avro序列化器的另一个问题,但暂时还可以),以及一个安全的KSQL服务器和客户机。 主题可以用来自JDBC源连接器的AVRO数据(只有值,没有键)正确填充。 我可以使用KSQL访问KSQL服务器

  • 意法半导体的M24LR64 IC支持ISO 15693协议,在Android NFC中也称为NfcV。当我把我的Nexus S手机(Android4.0.4)放在我的原型标签板附近时,我能听到嘟嘟的一声,并看到一条由logcat发出的消息: 我想知道为什么android发送的是ACTION_TAG_DISCOVERED意图,而不是ACTION_NDEF_DISCOVERED,因为我在ST应用笔记之

  • 我正在使用Reverfit2,我试图从我用Python制作的Web服务中请求一些数据。 实际上,它抛出了一个“java.lang.IllegalStateException”,但是当我调用GET方法时,API返回代码200,而且我还可以看到用于调试响应JSON的打印版本。问题是Call方法,因为它总是在failure时执行。 求求你,救命! 这是我的(简单的)Python Web服务,API-Pr

  • 问题内容: 我正在使用go-hdf5将hdf5文件读取到golang中。我在Windows7上使用的是mingw和hdf5 1.8.14_x86的最新副本,似乎尝试使用任何预定义的类型都行不通,让我们集中关注例如T_NATIVE_UINT64。我已将问题简化为以下内容,基本上将go- hdf5排除在了问题之外,而指出了一些根本性的错误: 您显然需要hdf5,并将编译器指向标头/ dll,然后运行g

  • 我一直在尝试打印和HTTP post使用Swift的一个移动应用程序,我可以用javascript和express登录它。js。但当使用Go创建的服务器时,它会给我: 下面你可以看到所有3种语言的代码: 斯威夫特: 在另一个文件的@obj func中调用: 戈朗代码: 可以阅读文章的Javascript服务器: 谢谢你抽出时间

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严