Flutter - Android intent-filter with Google Oauth
Flutter - Android intent-filter with Google Oauth
我已经使用 Google Oauth 构建了一个 Flutter 应用程序,但是我遇到了 intent-filter 的障碍。
我使用 https://pub.dev/packages/oauth2_client 包登录。
我在 Google Api 控制台中创建了一个 Android 凭据,只给我一个 client_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');
我将 intent-filter 添加到 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>
当登录功能是运行时,google说我:“自定义方案不能有权限”。
好吧...我试过 'http://my.test.app/oauth2redirect' -> 重定向 uri 不匹配。
我从 API 控制台下载了 JSON,我看到我的 Android 凭证只有 2 redirect_uri: "urn:ietf:wg:oauth:2.0:oob","http ://本地主机”。这是从哪里来的,我可以在哪里添加更多重定向 uri?
我将 Android 凭据更改为 Web 应用程序,我可以在其中添加自定义重定向 uri。
我在 Web 凭据中添加了一个假地址:“http://my.test.app”。这个证书给我一个 client_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'
]);
成功:Google 登录正常并重定向到 http://my.test.app,但程序卡住了。浏览器告诉我:“无法访问该站点”并且 Android 应用程序不会拦截响应。为什么??
我认为我的虚假网站不应该存在,不是吗??
我认为重定向 uri 在查询参数中获得授权代码,我的应用程序拦截它并且 oauth2_client 包处理响应。
为什么会卡在浏览器中?
这是一个故意的问题吗?我是不是配置不好?
我找到了解决方案:我必须重定向到客户端 ID 的反向 DNS 概念并且必须使用 Android 凭据(仅适用于 client_id)
就我而言:
android:scheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
customUriScheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
redirectUri: "com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:/"
我已经使用 Google Oauth 构建了一个 Flutter 应用程序,但是我遇到了 intent-filter 的障碍。
我使用 https://pub.dev/packages/oauth2_client 包登录。
我在 Google Api 控制台中创建了一个 Android 凭据,只给我一个 client_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');
我将 intent-filter 添加到 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>
当登录功能是运行时,google说我:“自定义方案不能有权限”。
好吧...我试过 'http://my.test.app/oauth2redirect' -> 重定向 uri 不匹配。 我从 API 控制台下载了 JSON,我看到我的 Android 凭证只有 2 redirect_uri: "urn:ietf:wg:oauth:2.0:oob","http ://本地主机”。这是从哪里来的,我可以在哪里添加更多重定向 uri?
我将 Android 凭据更改为 Web 应用程序,我可以在其中添加自定义重定向 uri。 我在 Web 凭据中添加了一个假地址:“http://my.test.app”。这个证书给我一个 client_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'
]);
成功:Google 登录正常并重定向到 http://my.test.app,但程序卡住了。浏览器告诉我:“无法访问该站点”并且 Android 应用程序不会拦截响应。为什么??
我认为我的虚假网站不应该存在,不是吗??
我认为重定向 uri 在查询参数中获得授权代码,我的应用程序拦截它并且 oauth2_client 包处理响应。
为什么会卡在浏览器中?
这是一个故意的问题吗?我是不是配置不好?
我找到了解决方案:我必须重定向到客户端 ID 的反向 DNS 概念并且必须使用 Android 凭据(仅适用于 client_id)
就我而言:
android:scheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
customUriScheme="com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
redirectUri: "com.googleusercontent.apps.XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:/"