背景
目前我们的项目有分享功能,想通过分享的链接实现判断用户是否已经下载,如果没有,则下载,下载了的用户则可以跳转到对应的详情页,查看详情
为了方便尽可能的少写代码,在 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 为应用分配的appkey
和 scheme
以及 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 为应用分配的appkey
和 scheme
以及 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 相关配置
开启 Associated Domains 服务
对于 iOS,为确保能正常跳转,AppID 必须开启 Associated Domains 功能,请到苹果开发者网站,选择 Certificate, Identifiers & Profiles,选择相应的 AppID,开启 Associated Domains。
注意:当 AppID 重新编辑过之后,需要更新相应的 mobileprovision 证书。
配置 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,
};
}
复制代码
以上就是关键代码,里面也有注释,希望对你有用
评论