深度链接未打开正确的活动

时间:2018-09-05 14:57:53

标签: android firebase firebase-dynamic-links

我有2个活动-MainActivity和DeepLinkActivity。 MainActivity生成一个链接。当我从短信中单击DeepLink时,我希望DeepLinkActivity打开,但是MainActivity总是打开。

清单文件如下:

    <activity
        android:name=".MainActivity"
        android:theme="@style/Theme.AppCompat"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".DeepLinkActivity"
        android:label="@string/app_name"
        android:theme="@style/ThemeOverlay.MyDialogActivity">

        <!-- [START deep_link_filter] -->
        <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:host="blessd.mobi" android:scheme="http"/>
            <data android:host="blessd.mobi" android:scheme="https"/>
        </intent-filter>
        <!-- [END deep_link_filter] -->
    </activity>

两个活动的片段

MainActivity

public class MainActivity extends AppCompatActivity  {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_referral);


        //long
        String link = "http://www.blessd.mobi";
        DynamicLink m = FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(Uri.parse(link))....

DeepLinkActivity

public class DeepLinkActivity extends AppCompatActivity implements
    View.OnClickListener {

    private static final String TAG = DeepLinkActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.deep_link_activity);
        Log.d(TAG,"Deep Activity" );

        FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    // Get deep link from result (may be null if no link is found)
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                    }...

谢谢

2 个答案:

答案 0 :(得分:1)

在清单活动中,您必须具有过滤器:

<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:host="yourlinkhost.com"
                    android:scheme="http" />
                <data
                    android:host="yourlinkhost.com"
                    android:scheme="https" />

            </intent-filter>

它应该处理您的链接。 Maby您的链接具有错误的主机方案-当我的链接具有错误的主机时,我遇到了此类问题。但是您拥有的解决方案-看起来不错,而且对我来说效果也不错。

答案 1 :(得分:0)

您必须在意向过滤器上添加其他数据。

           <data
            android:host=""
            android:path=""
            android:scheme="" />

并且您必须在创建共享意图时设置这些数据。

builder.scheme(getString(R.string.config_scheme)) // "http"
            .authority("your url") // your host
            .appendPath(getString(R.string.path)) // "your path"
            .appendQueryParameter(QUERY_PARAM, data)