在我的 Android 应用中验证 Google 帐户的最佳工作流程是啥?

Posted

技术标签:

【中文标题】在我的 Android 应用中验证 Google 帐户的最佳工作流程是啥?【英文标题】:What's the best workflow to authenticate a Google Account in my Android App?在我的 Android 应用中验证 Google 帐户的最佳工作流程是什么? 【发布时间】:2012-04-18 04:55:25 【问题描述】:

我正在尝试遵循这个示例:http://code.google.com/p/google-api-java-client/source/browse/tasks-android-sample/src/main/java/com/google/api/services/samples/tasks/android/TasksSample.java?repo=samples。

我的代码写得有点糟糕,但它是在 Google Code 中发布的。我试图建立的工作流程在这里:http://code.google.com/p/phone-to-desktop/source/browse/src/net/xisberto/phonetodesktop/PhoneToDesktopActivity.java?spec=svnd70158809aeb1ba00e26a33dc7110ade33b76427&name=google-tasks&r=d70158809aeb1ba00e26a33dc7110ade33b76427

在我最后一次尝试中,当应用程序转到以下方法时:

private void chooseAccount() 
    Log.i(getPackageName(), "Starting authenticate");
    AccountManager manager = AccountManager.get(getApplicationContext());
    manager.getAuthTokenByFeatures(
                "google.com",
                "Manage your tasks",
                null, PhoneToDesktopActivity.this, null, null,
                new AccountManagerCallback<Bundle>() 
                        @Override
                        public void run(AccountManagerFuture<Bundle> future) 
                            try 
                                Bundle bundle = future.getResult();
                                //So we save the account and token
                                setAccountName(bundle.getString(PREF_ACCOUNT_NAME));
                                setAuthToken(bundle.getString(PREF_AUTH_TOKEN));
                                Toast.makeText(getApplicationContext(),
                                    "Account authenticated: " +
                                    bundle.getString(PREF_ACCOUNT_NAME) + "\n" +
                                    bundle.getString(PREF_AUTH_TOKEN),
                                    Toast.LENGTH_SHORT).
                                show();
                                //Then we create the list we will use
                                createList();
                             catch (OperationCanceledException e) 
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                             catch (AuthenticatorException e) 
                                Log.e(getApplicationInfo().packageName, e.getMessage(), e);
                             catch (IOException e) 
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            
                        
                ,
                null);

我得到的只是没有视觉上的改变和 DDMS 中的这些消息:

04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488): bind failure
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488): android.accounts.AuthenticatorException: bind failure
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at android.accounts.AccountManager.convertErrorToException(AccountManager.java:1450)
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at android.accounts.AccountManager.access$400(AccountManager.java:138)
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1296)
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at android.os.Binder.execTransact(Binder.java:339)
04-18 00:59:53.187: E/net.xisberto.phonetodesktop(10488):   at dalvik.system.NativeStart.run(Native Method)

任何可以帮助的帮助/教程/代码示例?

提前致谢。

【问题讨论】:

我可以帮助你。请告诉我你想使用 Gmail 帐户身份验证吗? 我想访问任务服务。 “Gmail 帐户身份验证”是什么意思? 【参考方案1】:

您使用邮件 jar 文件、activation.jar 和其他 jar 文件使用,以下代码用于连接电子邮件应用程序到服务器电子邮件..

            Properties props = System.getProperties();
            props.setProperty("mail.store.protocol", "imaps");
            props.put("mail.smtp.starttls.enable","true");
            Authenticator auth = new Authenticator() 
                protected PasswordAuthentication getPasswordAuthentication()
                    return new PasswordAuthentication("USEREMAILID","PASSWORD ");
                    
            ;
            sessioned= Session.getDefaultInstance(props, auth);
            store = sessioned.getStore("imaps");
            store.connect("smtp.gmail.com","USEREMAILID","PASSWORD ");

希望对你有帮助!

【讨论】:

【参考方案2】:

好的,我必须管理身份验证。我无法理解要设置的过程和值。现在我的代码写得更好,效果更好。

【讨论】:

你能解释一下你做了什么并分享知识吗? @xisberto - 这是评论,不是答案。如果你要把它作为答案,你必须用代码拼出解决方案。 ta vacilando,Xb3rt0... 好的,明白了。正如我所说,我的代码是开源的,现在已在 GitHub 上发布:github.com/xisberto/phonetodesktop

以上是关于在我的 Android 应用中验证 Google 帐户的最佳工作流程是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Cordova Android 应用 Google Plus 身份验证错误 10

Cordova Android 应用 Google Plus 身份验证错误 10

为啥 Google 地图在我的 Android 应用程序中显示空白屏幕?

我是不是需要 Firebase 才能在我的 Android 应用中使用 Google 登录? [复制]

com.google.android.gms.auth.GoogleAuthException:getToken(未知来源)异常

在我的 iOS 应用中包含 Google+ SDK 时出现捆绑验证错误