写点什么

Flutter 如何一键唤起

作者:坚果
  • 2022 年 6 月 02 日
  • 本文字数:2890 字

    阅读完需:约 9 分钟

背景

目前我们的项目有分享功能,想通过分享的链接实现判断用户是否已经下载,如果没有,则下载,下载了的用户则可以跳转到对应的详情页,查看详情


为了方便尽可能的少写代码,在 pub 上发现 openinstall_flutter_plugin 插件


openinstall 插件封装了 openinstall 平台原生 SDK,集成了 渠道统计,携带参数安装,快速安装与一键拉起 功能,目前渠道支持 H5 渠道广告平台渠道 以及 Apple Search Ads (ASA) 渠道


接下来我们就介绍如何在自己的项目中使用

第一步,安装

安装方式有两种


1


flutter pub add openinstall_flutter_plugin
复制代码


2


dependencies:  openinstall_flutter_plugin: ^2.2.1
复制代码


大家可以看自己的需求进行安装。


在使用的地方


import 'package:openinstall_flutter_plugin/openinstall_flutter_plugin.dart';
复制代码


好的,我现在已经安装完毕,就开始教大家如何使用。

一、配置

前往 openinstall控制台 创建应用并获取 openinstall 为应用分配的appkeyscheme 以及 iOS 的关联域名(Associated Domains)

Android 平台配置

配置 appkey

/android/app/build.gradle 中添加代码设置 appkey:


android: {  ....  defaultConfig {    ...    manifestPlaceholders = [        OPENINSTALL_APPKEY : "openinstall为应用分配的appkey",    ]  }    }
复制代码

配置 scheme

修改 /android/app/src/main/AndroidMenifest.xml 文件,在跳转 Activity 标签内添加 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:scheme="openinstall为应用分配的scheme"/></intent-filter>
复制代码



openinstall flutter plugin

openinstall 插件封装了 openinstall 平台原生 SDK,集成了 渠道统计,携带参数安装,快速安装与一键拉起 功能,目前渠道支持 H5 渠道广告平台渠道 以及 Apple Search Ads (ASA) 渠道。使用 openinstall 可实现以下多种场景:


一、配置

前往 openinstall控制台 创建应用并获取 openinstall 为应用分配的appkeyscheme 以及 iOS 的关联域名(Associated Domains)


Android 平台配置

配置 appkey

/android/app/build.gradle 中添加代码设置 appkey:


android: {  ....  defaultConfig {    ...    manifestPlaceholders = [        OPENINSTALL_APPKEY : "openinstall为应用分配的appkey",    ]  }    }
复制代码

配置 scheme

修改 /android/app/src/main/AndroidMenifest.xml 文件,在跳转 Activity 标签内添加 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:scheme="openinstall为应用分配的scheme"/></intent-filter>
复制代码


如果跳转与启动页面是同一 Activity ,则配置示例如图:


iOS 平台配置

配置 appkey

在 Flutter 工程下的 ios/Runner/Info.plist 文件中配置 appKey 键值对,如下:


<key>com.openinstall.APP_KEY</key><string>openinstall 分配给应用的 appkey</string>
复制代码

一键拉起配置

universal links 相关配置
  1. 开启 Associated Domains 服务


对于 iOS,为确保能正常跳转,AppID 必须开启 Associated Domains 功能,请到苹果开发者网站,选择 Certificate, Identifiers & Profiles,选择相应的 AppID,开启 Associated Domains。


注意:当 AppID 重新编辑过之后,需要更新相应的 mobileprovision 证书。


  1. 配置 universal links 关联域名(iOS 9 以后推荐使用)


关联域名(Associated Domains) 的值请在 openinstall 控制台获取(openinstall 应用控制台->iOS 集成->iOS 应用配置)


该文件是给 iOS 平台配置的文件,在 ios/Runner 目录下创建文件名为 Runner.entitlements 的文件,Runner.entitlements 内容如下:


<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict>    <key>com.apple.developer.associated-domains</key><!--固定key值-->    <array>        <!--这里换成你在openinstall后台的关联域名(Associated Domains)-->        <string>applinks:xxxxxx.openinstall.io</string>    </array></dict></plist>
复制代码


首先我分享出去的链接是这样的


shareUrl =        "${"https://download" + "?type=" + "${widget.shareType}" + "&target_id=" + "${widget.id}"}";
复制代码


后面的 type 和 id 分别代表分享的类型和对应详情页的 id


首先初始化


  @override  void initState() {    super.initState();        initPlatformState();  }        Future<void> initPlatformState() async {    if (!mounted) return;
_openinstallFlutterPlugin = new OpeninstallFlutterPlugin(); _openinstallFlutterPlugin.init(wakeupHandler);
setState(() {}); }

Future wakeupHandler(Map<String, dynamic> data) async { String bindData = data['bindData'].toString(); if (strNoEmpty(bindData)) { AppWakeupModel model = AppWakeupModel.fromJson(jsonDecode(bindData)); AppConf.wakeupModel = model; NotificationCenter.post(NotificationChannel.WAKEUP_MESSAGE, model); } }
复制代码


class NotificationChannel { 
static const String WAKEUP_MESSAGE = "wakeup_message";
}
复制代码


 _launchProssgess();    void _launchProssgess() async {    if (AppConf.wakeupModel != null) {      _checkWakeupData();    }  }       void _checkWakeupData() {    if (AppConf.wakeupModel != null) {      if (AppConf.wakeupModel!.type == 1) {        //打开活动        Routes.push(            ActivityDetails(              activityid: AppConf.wakeupModel!.targetId,            ),            context: context);      } else if (AppConf.wakeupModel!.type == 2) {}    }    AppConf.wakeupModel = null;  }
复制代码


里面涉及到的 model


import 'dart:convert' show json, jsonEncode;
class AppWakeupModel { AppWakeupModel({ this.type, this.targetId, });
factory AppWakeupModel.fromJson(Map<String, dynamic> json) => AppWakeupModel( type: int.parse(json['type'].toString()), targetId: int.parse(json['target_id'].toString()), ); /** * 类型,1=活动,2=抽奖, */
int? type; /** * 对象id */ int? targetId;
@override String toString() { return jsonEncode(this); }
Map<String, dynamic> toJson() => <String, dynamic>{ 'type': type, 'targetId': targetId, };}
复制代码


以上就是关键代码,里面也有注释,希望对你有用

发布于: 刚刚阅读数: 3
用户头像

坚果

关注

此间若无火炬,我便是唯一的光 2020.10.25 加入

公众号:“大前端之旅”,华为云享专家,InfoQ签约作者,51CTO博客首席体验官,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。

评论

发布
暂无评论
Flutter如何一键唤起_6月月更_坚果_InfoQ写作社区