繁体   English   中英

目前编写Google Tasks或Drive App的步骤是什么?

What are the current steps to write a Google Tasks or Drive App?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在浏览了很多页面(大部分是矛盾的)后,我无法编写一个简单的Android应用程序,该应用程序确实通过OAuth2连接到Google:

我从此页面开始:

https://developers.google.com/google-apps/tasks/oauth-and-tasks-on-android#account

我确实下载了当前的库,并且不得不经历许多不推荐使用或缺少的功能:

  • 不推荐使用GoogleAccountManager
  • 在当前库中找不到HttpTransport,AndroidHttp,AccessProtectedResource,GoogleAccessProtectedResource,JacksonFactory
  • 通过开发人员控制台生成了CLIENT_ID
  • 生成SECRET不适用于移动应用程序,但必需

最新的描述是什么? 最新的演示是什么?

以防万一-这是我到目前为止所做的。 processTokenReceived中的所有方法都不是库的一部分:

public class ActivityMain extends Activity implements DialogInterface.OnClickListener {

    private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/drive";
    private static final String CLIENT_ID = "xxxxxxxxxxxx.apps.googleusercontent.com";

    private AccountManager accountManager;
    private Account[] accounts;
    private String authName;
    private String authToken;

    @Override
    public void onClick(final DialogInterface dialogInterface, final int item) {

        processAccountSelected(accounts[item]);
    }

    @Override
    public void onCreate(final Bundle bundle) {
        super.onCreate(bundle);

        setContentView(R.layout.activitymain);

        accountManager = AccountManager.get(this);
        accounts = accountManager.getAccountsByType("com.google");

        if (accounts == null || accounts.length == 0) {
            // TODO
        } else if (accounts.length == 1) {
            processAccountSelected(accounts[0]);
        } else if (accounts.length > 1) {
            showDialog(MyConstants.DIALOG_ACCOUNTCHOSER);
        }
    }

    @Override
    protected Dialog onCreateDialog(final int id) {
        switch (id) {
            case MyConstants.DIALOG_ACCOUNTCHOSER:
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

                String[] names = new String[accounts.length];

                for (int i = 0; i < accounts.length; i++) {
                    names[i] = accounts[i].name;
                }

                alertDialogBuilder.setItems(names, this);
                alertDialogBuilder.setTitle("Select a Google account");
                return alertDialogBuilder.create();
        }

        return null;
    }

    private void processAccountSelected(final Account account) {
        if (account != null) {
            authName = account.name.toString();
            if (!Tools.isEmpty(authName)) {
                Toast.makeText(this, authName, Toast.LENGTH_LONG).show();

                accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, null, this,
                        new AccountManagerCallback<Bundle>() {

                            public void run(final AccountManagerFuture<Bundle> future) {
                                try {
                                    authToken = future.getResult().getString(
                                            AccountManager.KEY_AUTHTOKEN);
                                    processTokenReceived();
                                } catch (OperationCanceledException exception) {
                                    // TODO
                                } catch (Exception exception) {
                                    Log.d(this.getClass().getName(), exception.getMessage());
                                }
                            }
                        }, null);
            }
        }
    }

    private void processTokenReceived() {
        if (!Tools.isEmpty(authToken)) {
            HttpTransport transport = AndroidHttp.newCompatibleTransport();
            AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(
                    accessToken);
            Tasks service = new Tasks(transport, accessProtectedResource, new JacksonFactory());
            service.accessKey = CLIENT_ID;
            service.setApplicationName("Google-DriveSample/1.0");
        }
    }
}
1 个回复

AccountManagergoogle-api-services库结合使用的最新示例是更新的Tasks API示例 GoogleAccountManager例如刚刚移到另一个软件包

如果您没有使用像Maven这样的构建管理器为您解决缺少的依赖关系,那么您当然必须手动包括提供HttpTransport等的google-api-java-client库

要使用AccountManager ,只需使用API​​控制台中提供的“简单API访问”键即可。 带有证书指纹的部分仅在Google Play服务可用后才相关。

1 jBehave编写通用步骤

我可以使用jBehave获得以下步骤方法吗? 如您所见,步骤文本是相同的。 唯一的情况是,在一种情况下,该值是通过参数注入来实现的,而在其他情况下,则是通过参数化方案来实现的 ...

3 Zapier:更新逾期的 Google Tasks

Google Tasks 最令人沮丧的事情之一是它没有每日概览。 它们确实显示在日历中,但很容易忘记过期的,因为日期仍然是过去的并且没有“过期”部分,例如在 Google 日历的议程视图中。 我正在尝试设置 Zapier 以在午夜更新我所有过期的 Google 任务。 具体来说,我想将截止日期更 ...

5 更新 TFS Shelveset 的步骤是什么?

创建 TFS 搁架集的过程将文件项的副本放在 TFS 服务器上,以供同行审查和以后可能作为变更集签入。 创建搁置集后,右键单击选项为“查看搁置集详细信息”、“取消搁置”、“删除搁置集”和“查看请求”。 我想知道两件事:“UnShelve”和“Delete ShelveSet”有什么区别? 我应该 ...

2019-12-13 03:33:25 1 1034   tfs
6 捆绑产品的步骤是什么?

在我的B2C项目中配置捆绑模块的扩展后,我按照官方Hybris站点的步骤进行操作。 但是,我很困惑,因为他们谈到了向容器添加产品。 如果我有一个新模板并且已经在其中配置了产品,那么容器和模板之间的关系是什么以及如何通过后台配置它们? ...

2019-04-26 14:06:06 0 30   hybris
8 DriveApp权限

我已经开发了一个可在我的组织中使用的应用程序,它与上传文件有关。 根据用户标识,将分配一个文件夹和一个工作表。 该文件夹用于上传文件,工作表用于记录数据的上传时间以及上传者以及其他数据。 作为所有者,一切正常。 当我将其部署为Web应用程序时,其他用户尝试使用它以获取Google云端硬盘 ...

10 打包和发布VS Code的步骤是什么?

我试图弄清楚如何打包一个不变的VS Code分支。 我的第一步是遵循电子应用分配文档 ,但该文档尚未成功。 我还发现了这篇文章 ,其他用户也有同样的问题。 但是, vscode-win32任务似乎已被x64和ia32版本取代,当我尝试运行这些任务时,它们会生成一个out-vscode文 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM