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

Flatter-Android意向过滤器与谷歌Oauth

东方震博
2023-03-14

我已经用Google Oauth构建了一个Flutter应用程序,但是我遇到了意图过滤器的障碍。

我用https://pub.dev/packages/oauth2_client用于登录的软件包。

我在谷歌Api控制台中创建了一个Android凭据,它只给我一个客户机id(在本例中是:“abc”)。

我的登录功能是:

GoogleOAuth2Client client = GoogleOAuth2Client(
                                customUriScheme: "my.test.app",
                                redirectUri: "my.test.app://oauth2redirect");

OAuth2Helper oauth2Helper = OAuth2Helper(client,
                                grantType: OAuth2Helper.AUTHORIZATION_CODE,
                                clientId: 'abc',
                                scopes: [
                                  'https://www.googleapis.com/auth/drive.readonly'
                                ]);

var resp = await oauth2Helper.get('https://www.googleapis.com/drive/v3/files');

我在main/AndrodiManifest中添加了意图过滤器。xml:

<activity android:name="com.linusu.flutter_web_auth.CallbackActivity" >
      <intent-filter android:label="flutter_web_auth">
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="my.test.app" />
      </intent-filter>
  </activity>

当登录功能运行时,谷歌对我说:“自定义方案不能有权限”。

好吧...我试着用“http://my.test.app/oauth2redirect”-

我将Android凭据更改为Web应用程序,可以在其中添加自定义重定向uri。我在网上添加了一个假地址:http://my.test.app“.这个凭证给了我一个客户id和一个秘密。

修改了sign_in功能:

GoogleOAuth2Client client = GoogleOAuth2Client(
                                customUriScheme: "my.test.app",
                                redirectUri: "http://my.test.app");

OAuth2Helper oauth2Helper = OAuth2Helper(client,
                                grantType: OAuth2Helper.AUTHORIZATION_CODE,
                                clientId: 'abc2',
                                clientSecret: 'acb3',
                                scopes: [
                                  'https://www.googleapis.com/auth/drive.readonly'
                                ]);

成功:谷歌登录正常,并重定向到http://my.test.app,但产品被卡住了。浏览器告诉我:“无法访问该网站”,Android应用程序不会拦截响应。为什么?

我不认为我的假网站应该存在,不是吗??

我认为重定向uri在查询参数中获得授权代码,我的应用程序拦截它,oauth2_客户端包处理响应。

为什么把它卡在浏览器里?

这是一个意图问题吗?我没有很好地配置一些东西?

共有1个答案

商昂然
2023-03-14

我找到了解决方案:我必须重定向到客户端ID的反向DNS概念,并且必须使用Android凭据(仅限于客户端ID)

就我而言:

android:scheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

customUriScheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
redirectUri: "com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:/"
 类似资料:
  • 我的目标是让Android自动打开我的应用程序中以开头的任何链接。我已经在服务器上放置了所需的文件: 这是我的舱单的相关部分: 我的设备使用Charles代理,它允许您查看请求。我没有看到有人要求去测试。touchwonders.com。我在安装前使用了,这应该已经清除了缓存并强制重新获取JSON。

  • 我正在开发一个连接到平板电脑时与USB设备通信的应用程序。为了避免用户接受android访问设备,我设置了一个意图过滤器: 我的问题是,有了这个意图过滤器,每次我插入设备并启动另一个活动时都会调用“onCreate”方法,如果没有意图过滤器,它只会被调用一次。这是“onCreate”方法: 广播接收机: 简单连接到设备的“setDevice”方法: 为什么?

  • 我正在努力解决下面的错误。 正如我在Targeting S(版本31及以上)中发现的那样,需要在存在意向过滤器时定义android:exported的显式值]和android Studio错误:“清单合并失败:针对android 12的应用程序”这只是将android:exported=“true”添加到android/app/src/main/AndroidManifest的问题。xml,但问题

  • 我正在使用google maps api V2开发一个android应用程序。问题是谷歌地图显示的方向取决于道路路线,即使它是一个空地。例如,以这两个LatLng LatLng1:-33.891143,151.224473 LatLng2:-33.891580,151.225336 有什么办法可以做到这一点吗?提前致谢

  • 因为我想用一些动画来启动我的应用程序。我需要先开始动画活动。SplashActivity是动画活动。 在manifest中,我尝试这样做: 但我有一个错误: 执行 com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction Android 资源链接失败时发生故障 错误:/Users/kal

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的