Мгновенное падение приложения при нажатии на кнопку «Попробовать» - PullRequest
0 голосов
/ 22 декабря 2018

Когда я тестирую мгновенное приложение, оно работает нормально, но после загрузки в Play Store, когда я нажимаю на кнопку «Попробуйте сейчас», происходит сбой приложения.

Вот мой код, когда я нажимаю на кнопку «Попробовать сейчас»:

package com.journaldev.androidinstantapps.feature;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;

public class ActivitySplash extends Activity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.splashfeature);


            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://quickeselling.com/splash"));
            intent.setPackage(getPackageName());
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            startActivity(intent);
        }
    }

В манифесте:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.journaldev.androidinstantapps.feature">

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.READ_PROFILE" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <application>
        <meta-data
            android:name="asset_statements"
            android:resource="@string/asset_statements" />
        <activity
            android:name=".ActivitySplash"
            android:label="@string/app_name">

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

            <meta-data
                android:name="default-url"
                android:value="https://quickeselling.com/preview" />

            <intent-filter
                android:autoVerify="true"
                android:order="1">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="quickeselling.com"
                    android:pathPrefix="/preview"
                    android:scheme="http" />
            </intent-filter>
            <intent-filter
                android:autoVerify="true"
                android:order="1">
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="quickeselling.com"
                    android:pathPrefix="/preview"
                    android:scheme="https" />
            </intent-filter>

        </activity>
    </application>

</manifest>

В отображении URL я открыл свое основное приложение через URL из заставки.Вот изображение URL-адреса.

enter image description here

Я много пробовал, но не знаю, в чем дело.Пожалуйста, помогите мне решить эту проблему.Вот журнал сбоев:

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

URL-адрес, который вы пытаетесь запустить из ActivitySplash вашего мгновенного приложения: https://quickeselling.com/splash не поддерживается в вашем мгновенном приложении (по крайней мере, не из тех манифестов, которые вы показали).Предоставленный вами манифест функции поддерживает только /preview.

Так что да, исключение правильное, не будет найдено никаких действий для обработки этого намерения / URL.

Теперь у вас естьснимок экрана, на котором показан модуль com.android.application, поддерживающий URL-адрес /splash.Тем не менее, ваш модуль приложения не устанавливается как часть текущего приложения, он устанавливается только тогда, когда пользователь устанавливает полное приложение.

Ничто из модуля приложения не может быть доступно из модулей мгновенного доступа во время его состояния какмгновенное приложение, если вы думали иначе.

Вам придется переместить действие, которое поддерживает /splash, в один из ваших функциональных модулей, чтобы это работало.

Это поможет вам понятьНемного о структуре мгновенных приложений: Какие зависимости следует помещать в каждый модуль мгновенного приложения?

Примечание: не должно быть способа, чтобы это работало, когдавы разрабатывали из студии, если только вы по незнанию не запускали его как установленное приложение, а не как мгновенное приложение (как видно на скриншоте, показывающее app как выбранную сборку запуска).

0 голосов
/ 22 декабря 2018

Нажав попытку, теперь работает, и ваш ActivitySplash запущен.Как вы можете видеть из трассировки стека, сбой происходит со второго намерения, которое вы запускаете сами в пределах onCreate.Проблема в том, что вы указываете пакет в намерении

intent.setPackage(getPackageName());

Поскольку ваше приложение не установлено, Android не найдет ничего, соответствующего этому намерению.Если действие, которое вы хотите запустить, находится в том же модуле, преобразуйте это намерение в явное, указав класс действия.В противном случае удалите setPackage, после чего Android загрузит функциональный модуль, обрабатывающий эту ссылку, и покажет его пользователю (или откроет этот URL в браузере, если не найдет соответствующий функциональный модуль)

ПоКстати, если вы хотите поддерживать HTTP и HTTPS в фильтрах намерений, вам не нужно писать фильтр намерений дважды.Просто добавьте

<data android:scheme="https" />

к существующему HTTP-фильтру намерений, и обе схемы будут соответствовать вашей активности.

...