在我的应用程序中配置 Firebase 深层链接的问题

Issues in configuring Firebase deeplinks in my app

我正在尝试在我的应用中配置 firebase 动态 link,但遇到了一些问题。

我做了以下事情: 1. 完成 Firebase 控制台的设置。 2.我在清单中的代码:

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

            <!-- [START link_intent_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="example.com"
                    android:scheme="https"/>
            </intent-filter>
            <!-- [END link_intent_filter] -->
        </activity>
    </application>

</manifest>
  1. 主要代码 activity :

    public class MainActivity 扩展 AppCompatActivity 实现 GoogleApiClient.OnConnectionFailedListener {

    private static final String TAG = "MainActivity";
    private static final String DEEP_LINK_URL = "https://example.com/deeplinks";
    
    // [START define_variables]
    private GoogleApiClient mGoogleApiClient;
    // [END define_variables]
    
    // [START on_create]
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // [START_EXCLUDE]
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        // Validate that the developer has set the app code.
        validateAppCode();
    
        // Create a deep link and display it in the UI
        final Uri deepLink = buildDeepLink(Uri.parse(DEEP_LINK_URL), 0, false);
        ((TextView) findViewById(R.id.link_view_send)).setText(deepLink.toString());
    
        // Share button click listener
        findViewById(R.id.button_share).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                shareDeepLink(deepLink.toString());
            }
        });
        // [END_EXCLUDE]
    
        // [START build_api_client]
        // Build GoogleApiClient with AppInvite API for receiving deep links
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(AppInvite.API)
                .build();
        // [END build_api_client]
    
        // [START get_deep_link]
        // Check if this app was launched from a deep link. Setting autoLaunchDeepLink to true
        // would automatically launch the deep link if one is found.
        boolean autoLaunchDeepLink = false;
        AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
                .setResultCallback(
                        new ResultCallback<AppInviteInvitationResult>() {
                            @Override
                            public void onResult(AppInviteInvitationResult result) {
                                if (result.getStatus().isSuccess()) {
                                    // Extract deep link from Intent
                                    Intent intent = result.getInvitationIntent();
                                    String deepLink = AppInviteReferral.getDeepLink(intent);
    
                                    // Handle the deep link. For example, open the linked
                                    // content, or apply promotional credit to the user's
                                    // account.
    
                                    // [START_EXCLUDE]
                                    // Display deep link in the UI
                                    ((TextView) findViewById(R.id.link_view_receive)).setText(deepLink);
                                    // [END_EXCLUDE]
                                } else {
                                    Log.d(TAG, "getInvitation: no deep link found.");
                                }
                            }
                        });
        // [END get_deep_link]
    }
    
  2. 我的 strings.xml 文件是这样的:

    深度link演示

    <!--
      Your app code, see:
      https://firebase.google.com/docs/dynamic-links/android
    -->
    <string name="app_code">pgm3j</string>
    
    
    <string name="share">Share</string>
    <string name="title_receive">Receive</string>
    <string name="title_send">Send</string>
    <string name="msg_no_deep_link">No deep link received.</string>
    

我想我还没有在其中创建动态 link。请帮助我如何创建一个。还让我知道如何使用这个动态 links,即我需要打开哪个 url 以及它将指向哪里。

此外,当我尝试在设备中安装此应用程序时,它没有收到 installed.I 不知道为什么没有安装。

谢谢

处理动态链接有两个位:

1) 处理常规深links

这意味着让您的应用处理 URLs。您已经为 example.com 添加了一个 intent 过滤器,方向正确,但您需要将其替换为您在其中的域。如果您没有,可以使用 Firebase 项目附带的 [yourproject].firebaseapp.com!

2) 收到解析 URLs

这就是您的 AppInviteApi 代码所做的,所以您在这里做得很好 - 解析从打开的 URL 生成的 Intent,并提取深度 link。对于生产应用程序,相同的代码还将检索通过 Play 商店传递的数据,因此即使用户必须安装该应用程序,link 也能正常工作。

最后,生成 link 的最简单方法是使用 Firebase Console 的动态 links 部分。