什么是App Linking

App Linking是一种不管应用是否已经安装都可以按照所需方式工作的跨平台链接,链接的目标内容可以是您想要推广的产品优惠活动,也可以是用户之间可以互相分享的应用原生内容。您可以在创建App Linking后将链接地址直接发送给用户,或者由用户在应用中动态生成App Linking并分享给其他用户,接收到App Linking的用户点击链接后即可跳转到链接指定的内容。
当用户点击App Linking时:

您将建立什么

在本次Codelab中,您将建立一个集成App Linking的Android应用程序。您的应用程序将包含:

您将会学到什么

开发环境及技能要求

运行终端要求

集成App Linking,需要完成以下准备工作

具体操作,请按照《AppGallery Connect应用集成准备》中详细说明来完成。

开通App Linking

  1. 在AppGallery Connect页面点击"我的项目",在项目的应用列表中选择需要开通App Linking的应用,导航选择"增长 > App Linking"。如果是首次使用App Linking服务,请点击"立即开通"开通服务。
  2. 如果产品数据存储位置未设置,需要选择该产品的数据存储位置,具体操作请参见设置数据存储位置

集成SDK

针对Android Studio开发环境,华为提供了maven仓集成方式的SDK包,开发前需集成SDK到您的Android Studio项目中。

  1. 在AppGallery Connect页面点击"我的项目",在项目的应用列表中选择需要开通App Linking的应用。
  2. 在项目设置的"常规"页签下,单击"应用"栏下的"agconnect-services.json"下载配置文件。
  3. 将"agconnect-services.json"文件拷贝到应用级根目录下。
  4. 打开Android Studio应用级build.gradle文件,在对应位置配置App Linking SDK。对App Linking的事件进行数据统计时需要使用华为分析服务,请同步添加华为分析服务SDK。
    //配置如下地址 apply plugin: 'com.huawei.agconnect' dependencies { //配置如下地址 implementation 'com.huawei.agconnect:agconnect-applinking:1.4.1.300' implementation ' com.huawei.hms:hianalytics:5.0.3.300' }
  5. 在应用级build.gradle文件中设置Java兼容模式为JDK1.8版本。
    compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 }
  6. 点击界面上的"Sync Now"链接同步已完成的配置。

本次Codelab中您可以在您的Android Studio工程中创建一个布局页面,参照下图进行UI设计,具备简单的创建App Linking及分享App Linking按钮即可。

  1. 在AppGallery Connect页面点击"我的项目",在项目的应用列表中选择需要开通App Linking的应用,导航栏选择"增长> App Linking"。
  2. 选择"链接前缀"页签,点击"添加链接前缀"。在"设置域名"中输入本次Codelab所使用的网址前缀。
  3. 完成输入并且点击"下一步",系统将自动验证该链接前缀是否可用。
  4. 验证通过并完成后,点击"返回"返回链接前缀管理页面。

在应用客户端创建App Linking时,需要有指定的链接前缀与DeepLink地址。本次Codelab中我们使用提前配置好链接前缀与DeepLink地址。

private TextView shortTextView; private TextView longTextView; private static final String DOMAIN_URI_PREFIX = "https://applinkingtest.drcn.agconnect.link"; private static final String DEEP_LINK = "https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides";
  1. 在MainActivity中入相关类。
    import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.huawei.agconnect.applinking.AppLinking; import com.huawei.agconnect.applinking.AGConnectAppLinking;
  2. 在onCreate方法定义相关界面元素。
    TextView deeplinktext = findViewById(R.id.deepLink); deeplinktext.setText(DEEP_LINK); shortTextView = findViewById(R.id.shortLinkText); longTextView = findViewById(R.id.longLinkText); //creatButton findViewById(R.id.create).setOnClickListener(view -> { createAppLinking(); }); //shareButton findViewById(R.id.shareShort).setOnClickListener(view -> { shareLink((String) shortTextView.getText()); }); findViewById(R.id.shareLong).setOnClickListener(view -> { shareLink((String) longTextView.getText()); });
  3. 初始化App Linking对象实例。
    AGConnectAppLinking.getInstance();
  4. 创建App Linking。
    private void createAppLinking() { AppLinking.Builder builder = new AppLinking.Builder().setUriPrefix(DOMAIN_URI_PREFIX) .setDeepLink(Uri.parse(DEEP_LINK)); longTextView.setText(builder.buildAppLinking().getUri().toString()); builder.buildShortAppLinking(ShortAppLinking.LENGTH.SHORT).addOnSuccessListener(shortAppLinking -> { shortTextView.setText(shortAppLinking.getShortUrl().toString()); }).addOnFailureListener(e -> { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); }); }
  5. 分享已创建的App Linking。
    private void shareLink(String agcLink) { if (agcLink != null) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, agcLink); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }
  1. 创建AdsActivity,用于展示接收链接后打开的页面。在对应的activity_ads.xml文件中,添加TestView布局,用于显示DeepLink。
    <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.4" />
  2. 打开AndroidManifest文件,在AdsActivity中添加需要接收DeepLink域名的Intent过滤器。
    <activity android:name=".AdsActivity" android:label="Ads_Page">> <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="developer.huawei.com" android:scheme="https" /> </intent-filter> </activity>
  3. 在AdsActivity中,接收App Linking并显示App Linking中的DeepLink。
    AGConnectAppLinking.getInstance().getAppLinking(this,getIntent()).addOnSuccessListener(resolvedLinkData -> { Uri deepLink = null; if (resolvedLinkData != null) { deepLink = resolvedLinkData.getDeepLink(); TextView textView = findViewById(R.id.textView); textView.setText(deepLink.toString()); } }).addOnFailureListener(e -> { Log.i("AppLinking", "getAppLinking:onFailure", e); });
  1. 运行Android Studio工程生成APK包,并在测试手机中安装APK包
  2. 查看初始化页面中,DeepLink文字框中内容与设置的地址是否一致。
  3. 点击"创建 App Linking"按钮。下方文字框中分别出现当前创建的长链接与短链接。
  4. 点击"分享长链接"按钮 ,将创建的长链接分享到提前安装准备好的ShareApp中,在ShareApp中验证长链接是否可以打开Ads_Page。
  5. 点击"分享短链接"按钮 ,将创建的短链接分享到提前安装准备好的ShareApp中,在ShareApp中验证短链接是否可以打开Ads_Page。

祝贺您,您已经成功地构建了您的第一个集成App Linking的应用程序,并学到了:

详细的App Linking开发指南请参见华为App Linking服务开发指南
AppGallery Connect App Linking的相关API介绍请参见API索引
本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码