- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不是程序员,但我需要自己做这件事。我需要一些帮助。
过去两天我一直在寻找解决方案,但找不到。
好的。我正在编写 Android native 应用程序。我的第一个目标是实现通过 Google 帐户(已在手机上设置)登录的可能性。
所以我正在使用 AccountManager 获取“com.google”帐户,我通过这种方式获取了一个授权 token :
Account[] mAccounts = mAccountManager.getAccountsByType("com.google");
AccountManagerFuture<Bundle> response =
mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null);
Bundle authTokenBundle;
String authToken;
try {
authTokenBundle = response.getResult();
authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
} catch (OperationCanceledException e) {
Log.e(TAG, e.getMessage());
} catch (AuthenticatorException e) {
Log.e(TAG, e.getMessage());
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
我的问题是 - 我的下一步应该是什么?我如何才能进一步进行此身份验证过程?我应该如何使用这个 token ?
我找到了一些资源,但其中大部分都使用 OAuth 或基于 Web。我只需要进行身份验证并(如果可能的话)获取用户名(我已经有了电子邮件地址),我不需要访问任何 Google 服务。
提前致谢。
最佳答案
实际上,您需要的是 OAuth 2,而不是 OpenID -- OpenID 本质上是基于网络的,因此您需要通过 WebView
或浏览器跳过一些障碍。 OAuth 2 允许您直接在应用程序中将来自 AccountManager 的 token 与 Google API 结合使用。
在调用 getAuthToken()
时,authTokenType
参数是 OAuth 2 范围,您希望它是 userinfo.profile
并且userinfo.email
以验证电子邮件地址(您已经拥有它,但尚未验证它;理论上它可能被欺骗)并获取用户的姓名。
这是我在类似情况下使用的完整范围:
private static final String OAUTH2_SCOPE =
"oauth2:" +
"https://www.googleapis.com/auth/userinfo.profile" +
" " +
"https://www.googleapis.com/auth/userinfo.email";
当然,您可以只使用内联的整个字符串文字,但我更喜欢将其构建起来并保持清晰,这样可以在以后必要时更轻松地进行更改。
在我的例子中,我使用 getAuthTokenByFeatures()
,如下所示:
am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null,
new AccountManagerCallback<Bundle>()
{
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
System.out.println("Got Bundle:\n" +
" act name: " +
bundle.getString(AccountManager.KEY_ACCOUNT_NAME) +
"\n act type: " +
bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) +
"\n auth token: " +
bundle.getString(AccountManager.KEY_AUTHTOKEN));
} catch (Exception e) {
System.out.println("getAuthTokenByFeatures() cancelled or failed:");
e.printStackTrace();
}
}
}, null);
但您可以将相同的想法应用到您的代码中。然后,您可以将 OAuth token 与 Google 用户信息 API 一起使用,如 Using OAuth 2.0 for Login 中所述验证电子邮件并获取用户名。
关于使用 Google OpenID 进行 Android 身份验证。接下来是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259202/
我有一个模型,我想为其检索下一条记录和上一条记录。我想通过模型上的 named_scope 来执行此操作,并且还将要返回的下一个/上一个记录的 X 数作为参数传入。 例如,假设我有 5 条记录: 记录
我有以下数据框: print(df) day month year quantity 6 04 2018 10 8
我在这个网站上看到过这样的问题;但他们只是提供生日数据而不提供计数例如:mysql query to get birthdays for next 10 days SQL Select Upcomin
我有以下数据框: print(dd) dt_op quantity product_code 20/01/18 1 613 21/01/18 8
Julia 中的迭代可以通过实现具有 3 个函数的迭代接口(interface)来为新定义的类型实现:start , next , done 我在这些函数的末尾没有看到感叹号,所以根据我对 julia
我正在阅读 clojure 中关于 rest 与 next 的解释。据我了解,它分解为 next 评估/实现序列的尾部,知道它是否应该返回nil,而rest总是返回序列,所以它更懒。 但是,我不明白的
早上好 我有以下数据框: a = [1,2,3,4,5,6] b = pd.DataFrame({'a': a}) 我想创建一个列,对“a”列的下“n”行求和,包括 a 的现值;我试过: n =
编写一个可以迭代任何可迭代对象的通用函数,返回现在,下一对。 def now_nxt(iterable): iterator = iter(iterable) nxt = iterat
我正在尝试显示接下来 5 分钟的剩余时间(捕捉到当前时间的完整 5 分钟,例如 15:05、15:10..) 我能够在下一个小时(而不是分钟)的剩余时间内实现相同的目标: function sec
我想捕获用户在接下来的 2 小时内执行的步数。 这就是我要说的。 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.H
我有一个如下所示的 DataFrame: ds y 0 2017-02-07 0.154941 1 2017-02-08 0.110595 2
我想通过集合分析计算过去 2 个值的总和 + 当前值 + 接下来的 2 个值。 无论是否使用集合分析,它都按预期工作。无论有无集分析 ( "{}" ),它都按预期工作。但是当缩放时,图形的值会相应地发
我有一个大数据集,低于训练和测试数据集 train_data是从2016-01-29到2017-12-31 head(train_data) date Date_t
另一个“如何删除上一个、下一个、完成按钮”-您可能会想的问题。实际上不是。我对此进行了相当深入的研究,并尝试了不同的方法,但似乎没有任何方法或解决方案能真正做到这一点。下面提到和显示的所有解决方法(就
我是一名优秀的程序员,十分优秀!