chenenyu/Router

处理h5打开app导致的死循环

chenliang7218 opened this issue · 5 comments

我自定义了一个activity来处理h5打开app

       <activity
            android:name=".activity.RouterActivity"
            android:theme="@android:style/Theme.NoDisplay">
            <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="swapshop" />
            </intent-filter>
        </activity>
public class RouterActivity extends Activity {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Uri uri = getIntent().getData();
        if (uri != null) {
            Router.build( uri).go(this, new RouteCallback() {
                @Override
                public void callback(RouteResult state, Uri uri, String message) {
                    if (state != RouteResult.SUCCEED) {
                        IMUIHelper.showToast(RouterActivity.this, "该版本不支持,请升级版本");
                    }
                }
            });
        }
        finish();
    }
}

当router处理没有定义的URI时,会一直调用RouterActivity来处理
怎么解决这个问题?

反馈已收到,你是怎么调用导致死循环的?

uri只有scheme,没有host?

uri 有scheme 和host。
以上面定义的RouterActivity为接受h5打开app的意图.

String uri = "swapshop://platformapi/xxxx";
Router.build(uri).go(mContext);

如果uri没有定义对应activity的话,就会不停打开RouterActivity,进入死循环

已知晓,如果你不想使用隐式匹配功能,可以干掉这个匹配器 使用Router.clearMatcher()清空,然后添加其它的匹配器Router.registerMatcher(xxx),包括DirectMatcher, SchemeMatcher,BrowserMatcher,可以参考MatcherRegistry这个类。 我想想有没有改进方式,感谢反馈。

Uri uri = getIntent().getData();
if (uri != null && !"swapshop".equals(uri.toString())) {
    Router.build(uri).go(this);
}

把你的scheme过滤掉就行,这种方式最简单。