17

Android Chrome カスタム タブを使用して OAuth2 フローを実装しようとしていますが、Chrome カスタム タブがアプリの場所/スキームで 302 を受信すると、アプリは常に閉じられます (クラッシュしません)。

ahref リンクを含む HTML ページを作成し、手動でタッチすると、Chrome カスタム タブがアプリに正しく切り替わります。

Chrome カスタム タブでサーバー 302 リダイレクトを処理すると、カスタム アプリ スキームが正しく処理されないように見えますが、なぜですか?

ストックブラウザまたはWebViewで同じリダイレクトURLを試してみると、すべてが機能しています。

これが私の現在の設定です:

MainActiviy.java

    Button btnChromeCustomTab = (Button) findViewById(R.id.btnChromeCustomTab);
    btnChromeCustomTab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
            String packageName = CustomTabsHelper.getPackageNameToUse(MainActivity.this);
            customTabsIntent.intent.setPackage(packageName);
            Uri theLocationUri = Uri.parse(URL);
            customTabsIntent.launchUrl(MainActivity.this, theLocationUri);
        }
    });

AndroidManifest.xml

    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter android:label="@string/filter_title">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="myappscheme" android:host="oauth" />
        </intent-filter>
    </activity>

これは、アプリが HTTP 302 コードで受け取ったリダイレクト URL です。

myappscheme://oauth?code=1234567&state=tokenCheck123

build.gradle

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"

defaultConfig {
    applicationId "de.myapptest.webviewtest"
    minSdkVersion 16
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
   testCompile 'junit:junit:4.12'
   compile 'com.android.support:appcompat-v7:23.2.1'
   compile 'com.android.support:design:23.2.1'
   compile 'com.android.support:customtabs:23.0.0+'
}

助けてくれてありがとう...

4

4 に答える 4

6

android:launchMode="singleInstance" を使用した場合、タスク マネージャーに複数のインスタンスがあったため、これはオプションではありませんでした。

FLAG_ACTIVITY_NEW_TASK フラグで CustomTabsIntent を開始すると、うまくいきました。

CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent intent = builder.build();

intent.intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
intent.launchUrl(context, Uri.parse(url));
于 2016-10-11T09:18:39.523 に答える
0

これはChromeのバグの結果だと確信しています。すべてのデバイス (GS6、GS7、Nexus 7、Nexus 9) を最新バージョンの Chrome に更新したところ、リダイレクトが発生したときにアプリが最小化されなくなりました。

これは今日 (2016 年 11 月 3 日) 発見したばかりなので、特定のバグやその後の解決策に関する情報はまだありません。これは私が気づいたことです。

それが役立つことを願っています!

于 2016-11-03T22:55:41.137 に答える