Flutter应用链接管理插件agconnect_applinking的使用

Flutter应用链接管理插件agconnect_applinking的使用

目录

1. 引言

App Linking允许你创建跨平台链接,这些链接可以按定义工作,无论用户是否已安装你的应用。在App Linking中,你可以创建长链接和短链接。

通过设置跟踪参数来识别用户的来源,可以在创建链接时追踪流量来源。基于跟踪参数分析每个流量来源的链接性能,可以找到能为你的应用带来最佳推广效果的平台。

此插件实现了AppGallery Connect Applinking Kit SDK与Flutter平台之间的通信,它暴露了AppGallery Connect Applinking Kit SDK提供的所有功能。

工作原理

你可以以以下模式之一创建App Linking链接:

  • 在AppGallery Connect中创建链接
  • 通过客户端调用API创建链接
  • 手动构建链接

当链接被点击时,会根据你指定的链接打开模式以及用户是否已安装你的应用来触发相应的操作。

链接可以在浏览器或你的应用中打开,这由你决定。

如果你设置链接在浏览器中打开,用户可以从移动设备或PC上打开链接。

如果你设置链接在你的应用中打开,当未安装应用的用户点击链接时,用户将被重定向到AppGallery(或自定义地址)并提示安装你的应用。用户安装应用后,应用将启动并显示目标内容。

如果已安装应用的用户点击链接,用户将直接被重定向到目标内容。

使用场景

  • 唤醒不活跃用户/增加特定页面的浏览量

    你可以在运营 > 推广 > 管理促销 > 活动下创建一个唤醒活动,然后创建一个App Linking链接,通过社交媒体、电子邮件、短信或推送消息将用户引导到该活动。如果用户发现活动吸引人并点击链接,你的应用将启动,并将用户重定向到活动页面,提示他们完成活动所需的操作,例如分享或付款。这样可以提高用户活动并增加页面浏览量。

  • 将移动网站用户转化为原生应用用户

    当移动网站用户在页面上打开一个普通共享链接(非App Linking链接)时,用户需要先安装应用,返回页面,再次打开链接。App Linking可以通过在用户安装你的应用后直接将其重定向到目标内容来极大地提升用户体验。

  • 在日常营销中追踪流量来源以识别最有效的营销平台

    你可以为App Linking的营销链接设置跟踪参数,放置在多个营销平台上,从而根据收集到的每个平台的数据来识别哪个平台可以实现最佳的营销效果,并检查该平台上的用户是否符合你最初定义的用户画像。

  • App Linking与云函数和云数据库协同工作

    App Linking可以与云函数和云数据库协同工作,通过提供激励来鼓励用户分享链接给朋友,有效促进你的应用用户增长。

2. 安装指南

在开始之前,你必须在HUAWEI Developer网站注册并完成身份验证。详情请参阅注册HUAWEI ID

创建AppGallery Connect项目

要在AppGallery Connect中创建项目,以便与华为服务通信。请执行以下步骤:

  • 步骤1: 登录到AppGallery Connect,选择我的项目
  • 步骤2: 从项目列表中选择你的项目,或者点击添加项目按钮创建新项目。
  • 步骤3: 进入项目设置 > 基本信息,点击添加应用。 如果项目中已有应用并且需要添加新应用,请展开页面顶部的应用选择区域并点击添加应用
  • 步骤4:添加应用页面,输入应用信息,然后点击确定

集成Flutter AppLinking插件

Android应用开发
  • 步骤1: 登录到AppGallery Connect,从我的项目中选择你的项目。然后进入成长 > App Linking Kit并点击立即启用以启用华为App Linking Kit服务。你也可以在项目设置页的管理API标签中检查已启用的AppGallery Connect服务。
  • 步骤2: 进入项目设置 > 基本信息页面,在应用信息字段下点击agconnect-services.json以下载配置文件。
  • 步骤3:agconnect-services.json文件复制到你的项目的**example/android/app/**目录。
  • 步骤4: 打开example/android目录下的build.gradle文件。
    • 导航到buildscript部分并配置AppGallery Connect SDK的Maven仓库地址和agconnect插件。
    buildscript {
      repositories {
          google()
          jcenter()
          maven { url 'https://developer.huawei.com/repo/' }
      }
      
      dependencies {
          classpath 'com.huawei.agconnect:agcp:1.7.1.300'
      }
    }
    
  • 步骤5: 打开example/android/app/目录下的build.gradle文件。
    • 在其他apply条目之后添加apply plugin: 'com.huawei.agconnect'行。
    apply plugin: 'com.android.application'
    apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
    apply plugin: 'com.huawei.agconnect'
    
    • defaultConfig > applicationId中设置包名,并将minSdkVersion设置为19或更高版本。包名必须与agconnect-services.json文件中的package_name条目匹配。
    defaultConfig {
        applicationId "<package_name>"
        minSdkVersion 19
    }
    
  • 步骤6: 编辑buildTypes并添加signingConfigs
    signingConfigs {
        config {
               storeFile file('<keystore_file>.jks/.keystore')
               storePassword '<keystore_password>'
               keyAlias '<key_alias>'
               keyPassword '<key_password>'
           }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.config
        }
        release {
            signingConfig signingConfigs.config
        }
    }
    
  • 注意
    • 在获取agconnect-services.json文件之前,请确保已启用HUAWEI App Linking Kit。有关如何启用HUAWEI App Linking Kit的详细信息,请参阅启用所需服务
    • 如果你在开发模块中进行了任何更改,例如设置数据存储位置和启用或管理API,请下载最新的agconnect-services.json文件并替换应用程序目录中的现有文件。
  • 步骤7: 若要使用深层链接接收数据,你需要向处理链接的活动添加以下配置。将android:host设置为deepLink中的域名,并将android:scheme设置为自定义方案。当用户点击包含此深层链接的链接时,您的应用将使用此活动处理链接。
    <!-- AndroidManifest.xml -->
    <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="<DeepLink_Host>" android:scheme="https" />
    </intent-filter>
    
  • 步骤8: 设置Android启动模式。
    <activity
       android:launchMode="standard">
    
  • 步骤9: 在Flutter项目目录中,找到并打开pubspec.yaml文件,并将agconnect_applinking库添加到依赖项中。更多详细信息请参阅使用软件包文档。
    dependencies:
      agconnect_applinking: {library version}
    
  • 步骤10: 运行以下命令以更新包信息。
    [project_path]> flutter pub get
    
  • 步骤11: 导入库以访问方法。
    import 'package:agconnect_applinking/agconnect_applinking.dart';
    
  • 步骤12: 运行以下命令以启动应用。
    [project_path]> flutter run
    
iOS应用开发
  • 步骤1: 登录到AppGallery Connect,从我的项目中选择你的项目。然后进入成长 > App Linking Kit并点击立即启用以启用华为App Linking Kit服务。你也可以在项目设置页的管理API标签中检查已启用的AppGallery Connect服务。
  • 步骤2: 进入项目设置 > 基本信息页面,在应用信息字段下点击agconnect-services.plist以下载配置文件。
  • 步骤3:agconnect-services.plist文件复制到你的Xcode项目的根目录。
  • 注意
    • 在获取agconnect-services.plist文件之前,请确保已启用HUAWEI App Linking Kit。有关如何启用HUAWEI App Linking Kit的详细信息,请参阅启用所需服务
    • 如果你在开发模块中进行了任何更改,例如设置数据存储位置和启用或管理API,请下载最新的agconnect-services.plist文件并替换应用程序目录中的现有文件。
  • 步骤4: 在Flutter项目目录中,找到并打开pubspec.yaml文件,并将agconnect_applinking库添加到依赖项中。更多详细信息请参阅使用软件包文档。
    dependencies:
      agconnect_applinking: {library version}
    
  • 步骤5: 检查接收到的链接是否是App Linking链接以及应用是否可以处理该链接。
  • 注意 调试Flutter
    • 其他没有主机计算机的启动路径,如深层链接或通知,在iOS 14物理设备上的调试模式中无法工作。
    • 你也可以在发布模式或释放模式下构建应用程序,或者在模拟器上进行测试,这些都不会受到影响。
  • 步骤6: 运行以下命令以更新包信息。
    [project_path]> flutter pub get
    
  • 步骤7: 导入库以访问方法。
    import 'package:agconnect_applinking/agconnect_applinking.dart';
    
  • 步骤8: 运行以下命令以启动应用。
    [project_path]> flutter run
    

3. API参考

AGCAppLinking

包含类,提供方法来创建跨平台链接,这些链接可以按定义工作,无论用户是否已安装你的应用。创建的链接可以通过多种渠道分发给用户。

公共构造函数摘要
构造函数 描述
AGCAppLinking() 默认构造函数
公共方法摘要
方法 返回类型 描述
buildShortAppLinking(ApplinkingInfo applinkingInfo) Future<ShortAppLinking> 异步生成具有字符串后缀的短链接。你可以指定后缀为长或短的。
buildLongAppLinking(ApplinkingInfo applinkingInfo) Future<LongAppLinking> 获取长链接。
onResolvedData() Stream<ResolvedLinkData> 检查是否可以从指定的App Linking链接接收数据。
公共构造函数
AGCAppLinking()

创建AGCAppLinking对象的构造函数。

公共方法
Future<ShortAppLinking> buildShortAppLinking(ApplinkingInfo applinkingInfo) 异步

生成短链接和测试URL。

参数 描述
applinkingInfo 设置要包含在App Linking链接中的信息。
返回类型 描述
Future<ShortAppLinking> App Linking的短链接和测试URL。
Call Example
try {
  ShortAppLinking shortAppLinking =
      await agcAppLinking.buildShortAppLinking(appLinkingInfo);
  print(shortAppLinking.toString());
  _showDialogShort(context, shortAppLinking);
} on PlatformException catch (e) {
  _showDialog(context, e.toString());
}
Future<LongAppLinking> buildLongAppLinking(ApplinkingInfo applinkingInfo) 异步

生成长链接。

参数 描述
applinkingInfo 设置要包含在App Linking链接中的信息。
返回类型 描述
Future<LongAppLinking> App Linking的长链接。
Call Example
try {
  LongAppLinking longAppLinking =
      await agcAppLinking.buildLongAppLinking(appLinkingInfo);
  print(longAppLinking.longLink.toString());
  _showDialogLong(context, longAppLinking);
} on PlatformException catch (e) {
  _showDialog(context, e.toString());
}
Stream<ResolvedLinkData> onResolvedData() 异步

检查是否可以从指定的App Linking链接接收数据。

返回类型 描述
Stream<ResolvedLinkData> App Linking数据,异步返回。
Call Example
_streamSubscription = agcAppLinking.onResolvedData.listen((event) async {
  print(event.toString());
});

公共常量

ResolvedLinkData

代表App Linking的数据类。

字段 类型 描述
deepLink Uri 获取App Linking链接中的深层链接。
clickTimeStamp int 获取点击App Linking链接的时间。
socialTitle string 预览标题的地址。
socialDescription string 预览描述。
socialImageUrl string 预览图像的地址。
campaignName string 活动名称。
campaignMedium string 活动媒介。
campaignSource string 活动来源。
ShortAppLinking

代表App Linking短链接和测试URL的数据结构。

字段 类型 描述
shortLink Uri 短链接。
testUrl Uri 预览App Linking链接流程图的URL。
LongAppLinking

代表App Linking长链接的数据结构。

字段 类型 描述
longLink Uri 长链接。
SocialCardInfo

代表App Linking社交共享标识符信息的数据结构。

字段 类型 描述
description string 预览描述。
imageUrl string 预览图像的地址。
title string 预览标题的地址。
Call Example
SocialCardInfo socialCardInfo = SocialCardInfo(
  description: 'description short link',
  imageUrl: 'https://avatars2.githubusercontent.com/u/64997192?s=200&v=4',
  title: 'AGC Guides',
);
CampignInfo

代表App Linking活动信息的数据结构。

字段 类型 描述
medium string 活动媒介。
name string 活动名称。
source string 活动来源。
Call Example
CampaignInfo campaignInfo = CampaignInfo(
  medium: 'JULY',
  name: 'summer campaign',
  source: 'Huawei',
);
AndroidLinkInfo

代表App Linking中的Android应用信息的数据结构。

字段 类型 描述
androidPackageName string 当需要在具有指定APK名称的应用中打开App Linking链接时所需的构造函数。此构造函数保留且当前不支持。
androidDeepLink string Android应用的深层链接。
androidOpenType AppLinkingAndroidLinkInfoAndroidOpenTypeConstants 当点击链接但应用未安装时触发的动作。
androidFallbackUrl string 应用未安装时访问的自定义URL。
Call Example
AndroidLinkInfo androidLinkInfo = new AndroidLinkInfo(
  androidFallbackUrl: 'https://consumer.huawei.com/en/',
  androidOpenType: AppLinkingAndroidLinkInfoAndroidOpenTypeConstants.CUSTOM_URL,
  androidPackageName: "<packageName>",
  androidDeepLink: 'https://developer.huawei.com/consumer/en/doc/overview/AppGallery-connect',
);
iOSLinkInfo

代表App Linking中的iOS应用信息的数据结构。

字段 类型 描述
iosDeepLink string iOS应用的深层链接。
iosFallbackUrl string iOS应用的深层链接。
iosBundleId string iOS应用的Bundle ID。
ipadFallbackUrl string iPad应用未安装时访问的URL。
ipadBundleId string iPad应用的Bundle ID。
Call Example
iOSLinkInfo iosLinkInfo = iOSLinkInfo(
  iosDeepLink: 'pages://flutteraplinking.com',
  iosBundleId: '<bundle id>',
);
iTunesLinkInfo

代表App Linking iTunesConnect活动信息的数据结构。

字段 类型 描述
iTunesConnectProviderToken string iTunesConnect的提供商令牌。
iTunesConnectCampaignToken string iTunesConnect的活动令牌。
iTunesConnectAffiliateToken string iTunesConnect的附属令牌。
iTunesConnectMediaType string iTunesConnect的媒体类型。
Call Example
iTunesLinkInfo tunesLinkInfo = iTunesLinkInfo(
  iTunesConnectAffiliateToken: "<affiliateToken>",
  iTunesConnectCampaignToken: "<campaignToken>",
  iTunesConnectProviderToken: "<providerToken>",
  iTunesConnectMediaType: "<mediatype>",
);
AppLinkingWithInfo

代表App Linking信息的数据结构。

字段 类型 描述
socialCardInfo SocialCardInfo 代表App Linking中的社交共享标识符信息的数据结构。
campignInfo CampignInfo 代表App Linking中的活动信息的数据结构。
androidLinkInfo AndroidLinkInfo 代表App Linking中的Android应用信息的数据结构。
iosLinkInfo iOSLinkInfo 代表App Linking中的iOS应用信息的数据结构。
itunesLinkInfo iTunesLinkInfo iTunesConnect活动参数。
expireMinute int 短链接的有效期,单位为分钟。默认情况下,短链接有效期为两年,最短有效期为5分钟。
previewType AppLinkingLinkingPreviewTypeConstants App Linking链接的预览页面样式。
uriPrefix string 由AppGallery Connect提供的免费域名。
deepLink string 深层链接是你的应用内容的URL。
longLink string 长链接是你的应用内容的URL。
shortAppLinkingLength ShortAppLinkingLengthConstants 指定短链接的字符串后缀是长还是短。
Call Example
ApplinkingInfo appLinkingInfo = ApplinkingInfo(
  socialCardInfo: socialCardInfo,
  androidLinkInfo: androidLinkInfo,
  iosLinkInfo: iosLinkInfo,
  domainUriPrefix: '<uriprefix>',
  deepLink: 'https://developer.huawei.com',
  shortAppLinkingLength: ShortAppLinkingLengthConstants.LONG,
);
常量
ShortAppLinkingLengthConstants

指定短链接的字符串后缀是长还是短。此类用于创建短链接。

字段 类型 描述
SHORT string 短链接使用包含四个或更多字符的短字符串后缀。
LONG string 短链接使用包含17个字符的长字符串后缀。
AppLinkingLinkingPreviewTypeConstants

App Linking链接的预览页面样式。

字段 类型 描述
APP_INFO string 显示带有应用信息的预览页面。
SOCIAL_INFO string 显示带有社交共享卡片的预览页面。
AppLinkingAndroidLinkInfoAndroidOpenTypeConstants

当点击链接但目标应用未安装时触发的动作。

字段 类型 描述
APP_GALLERY string 在AppGallery中显示应用详情页面。
LOCAL_MARKET string 在本地应用市场中显示应用详情页面。
CUSTOM_URL string 使用fallbackUrl字段显示应用详情页面。

4. 配置与描述

准备发布

在构建APK之前,配置混淆脚本来防止AppGallery Connect SDK被混淆。如果出现混淆,AppGallery Connect SDK可能无法正常工作。更多相关信息请参阅Android开发者指南

&lt;flutter_project&gt;/android/app/proguard-rules. pro
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hianalytics.**{*;}
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.agc.**{*;}
-keep class com.huawei.agconnect.**{*;}

## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-dontwarn io.flutter.embedding.**
-keep class com.huawei.agc.flutter.** { *; }
-repackageclasses
&lt;flutter_project&gt;/android/app/build.gradle
buildTypes {
    debug {
        signingConfig signingConfigs.config
    }
    release {
        // 启用代码压缩、混淆和优化
        minifyEnabled true
        // 删除未使用的资源,保留定义在res/raw/keep.xml中的资源
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.config
    }
}

访问分析工具套件

要使用分析功能,

  • 导航到你的/android/app/build.gradle并添加构建依赖项。
    dependencies {
        implementation 'com.huawei.hms:hianalytics:5.1.0.301'
    }
    
  • 导航到你的/ios文件并编辑Podfile文件以添加HiAnalytics pod依赖。
    • 示例Podfile文件:
    # Pods for AGCAppLinkingDemo
    pod 'HiAnalytics'
    
    • 运行pod install以安装pod。
    $ pod install
    
    • 在iOS平台上使用AppDelegate中的配置API初始化分析SDK。 示例代码:
    import UIKit
    import Flutter
    import HiAnalytics
    
    [@UIApplicationMain](/user/UIApplicationMain)
    [@objc](/user/objc) class AppDelegate: FlutterAppDelegate {
        override func application(
            _ application: UIApplication,
            didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
        ) -> Bool {
            // 初始化分析SDK
            HiAnalytics.config();
    
            GeneratedPluginRegistrant.register(with: self)
            return super.application(application, didFinishLaunchingWithOptions: launchOptions)
        }
    }
    

更多关于Flutter应用链接管理插件agconnect_applinking的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用链接管理插件agconnect_applinking的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


agconnect_applinking 是华为开发者服务(Huawei Mobile Services, HMS)提供的一个插件,用于在 Flutter 应用中管理应用链接(App Linking)。通过这个插件,开发者可以生成动态链接,并处理用户点击链接时的跳转逻辑,从而提升用户体验和应用的互动性。

1. 集成 agconnect_applinking 插件

首先,你需要在 pubspec.yaml 文件中添加 agconnect_applinking 插件的依赖:

dependencies:
  agconnect_applinking: ^1.0.0+1

然后运行 flutter pub get 来安装依赖。

2. 初始化 agconnect_applinking

在应用启动时,你需要初始化 agconnect_applinking。通常,你可以在 main.dart 文件中进行初始化:

import 'package:agconnect_applinking/agconnect_applinking.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 AGConnectAppLinking
  await AGConnectAppLinking.instance.init();
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 生成应用链接

你可以使用 AGConnectAppLinking 来生成动态链接。以下是一个简单的示例:

import 'package:agconnect_applinking/agconnect_applinking.dart';

Future<String> createAppLink() async {
  AppLinkingLink link = AppLinkingLink(
    uriPrefix: 'https://yourdomain.page.link',
    link: 'https://yourdomain.com/path',
    androidParameters: AndroidParameters(packageName: 'com.example.app'),
    iosParameters: IOSParameters(bundleId: 'com.example.app'),
  );

  AppLinkingShortLink shortLink = await AGConnectAppLinking.instance.buildShortLink(link);
  return shortLink.shortUrl;
}

4. 处理应用链接

当用户点击应用链接时,你需要处理链接并执行相应的操作。你可以在应用的 initStatedidChangeDependencies 中监听链接:

import 'package:agconnect_applinking/agconnect_applinking.dart';
import 'package:flutter/material.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _linkData = '';

  @override
  void initState() {
    super.initState();
    _handleAppLink();
  }

  void _handleAppLink() async {
    Uri? initialLink = await AGConnectAppLinking.instance.getInitialLink();
    if (initialLink != null) {
      setState(() {
        _linkData = initialLink.toString();
      });
    }

    AGConnectAppLinking.instance.onLink.listen((Uri? link) {
      if (link != null) {
        setState(() {
          _linkData = link.toString();
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('App Linking Example'),
      ),
      body: Center(
        child: Text('Link Data: $_linkData'),
      ),
    );
  }
}

5. 配置 Android 和 iOS 项目

Android 配置

AndroidManifest.xml 中,添加以下配置以支持应用链接:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:host="yourdomain.page.link" android:scheme="https" />
</intent-filter>

iOS 配置

Info.plist 中,添加以下配置以支持应用链接:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.example.app</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>https</string>
        </array>
    </dict>
</array>
回到顶部