我正在使用这个 OAuth 库https://github.com/openid/AppAuth-Android 我已经注册了一个自定义方案
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="kronos"
android:host="oauth2"/> <!-- Redirect URI scheme -->
</intent-filter>
</activity>
我有这些方法:
private void authorize() {
AuthorizationRequest authRequest = new AuthorizationRequest.Builder(
mServiceConfiguration,
"...", // Client ID
ResponseTypeValues.CODE,
Uri.parse("kronos://oauth2/callback") // Redirect URI
).setScope("auth").build();
AuthorizationService service = new AuthorizationService(this);
Intent intent = service.getAuthorizationRequestIntent(authRequest);
startActivityForResult(intent, REQUEST_CODE_AUTH);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == REQUEST_CODE_AUTH) {
Log.d(TAG, "get the token");
return;
}else{
Log.d(TAG, "wrong code");
return;
}
它工作正常,但现在我想处理一个自定义 URL,例如“kronos://something”,所以到目前为止这里有 2 个问题:
- 可以在 onActivityResult 中进行处理吗?如何处理?
- 我可以在 chrome 中调用这个自定义协议进行测试(比如在带有 safari 的 iOS 中)吗?
编辑:更准确地说,当用户注销以删除 OAuth 令牌时,我收到的是自定义 URL
EDIT2 我已经在清单中添加了
<activity android:name=".activity_logoff">
<intent-filter>
<data android:scheme="kronos"
android:host="something"/> <!-- Redirect URI scheme -->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
但我不知道如何让应用程序拦截所有 url “kronos://something”
EDIT3 我现在已经创建了可能需要的 Intent
Uri logoutUri = Uri.parse("kronos://something");
Intent logoutIntent1 = new Intent(Intent.ACTION_VIEW,logoutUri);
EDIT4 我添加了
logoutIntent1.setPackage(getApplicationContext().getPackageName());
但是接下来该怎么做