flutter 集成 openInstall
1.需求描述
在网上寻找或自己编写Flutter语言编程的小游戏或小应用
- 集成open install sdk (原生app使用openinstall 插件)
- 首次启动需根据openinstall或者剪切板两个途径,是否获取到参数来确认时显示游戏程序还是项目程序,然后做本地存储(每次获取到新的参数需要更新本地参数)
- 之后根据获取本地存储的参数:1、启动原生app,2、调用接口获取h5地址等信息,启动 web app;
2.openInstall简介
·App传参安装:
openinstall的核心价值在于,帮助Android/iOS开发者精确的获取App每一次安装的分享(或推广)来源。
大致原理如下:
- 开发者在分享的h5页面上集成openinstall web sdk,发布分享链接时在url上动态的拼接任意的自定义参数(如推广渠道号,邀请码,游戏房间号等等);
- 当某一终端访问该h5页面时,openinstall web sdk将同时确定该设备的个性化信息和采集自定义参数,上传至openinstall服务器, 待用户通过该h5页面安装App后首次打开时(如当前设备已安装该App,将直接拉起App),使用openinstall Android/iOS sdk从openinstall服务器再取回暂存的自定义参数;
- 开发者根据各自的需求,在分享链接自定义拼接各种动态参数。比如通过在分享链接url中附带App邀请人的用户id,就可达到免填邀请码的效果。对战类游戏App通过在url中附带游戏房间号,新老用户都可通过该url链接直接进入邀请人的对战房间,更多使用场景均取决于开发者的需求。
3.集成步骤
官方文档地址:https://www.openinstall.io/doc/flutter_sdk.html
Flutter接入指引
一、安装
1. 添加依赖
在项目的pubspec.yaml文件中添加以下内容:
dependencies:
openinstall_flutter_plugin: ^2.1.2
2. 安装插件
使用命令行获取
$ flutter pub get
或者使用开发工具的flutter pub get
3. 导入
在Dart代码中使用以下代码导入:
import 'package:openinstall_flutter_plugin/openinstall_flutter_plugin.dart';
二、配置
前往openinstall控制台创建应用并获取 openinstall 为应用分配的appkey和scheme以及 iOS的关联域名(Associated Domains)
appkey和scheme
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>
flutter-android-manifest.jpg
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证书。
开启Associated Domains
2.配置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>
注意:插件版本>=1.3.1开始,iOS通用链接原生代码已在插件内部完成
1) 1.3.1之前版本升级后可不做任何改动
2)首次集成插件的用户,如果拉起无法获取到参数,是因为方法被其它插件覆盖导致(openinstall插件不会覆盖其它插件),可以有两种方法解决:
- 第一种方法,提早加载openinstall插件,无效的话使用第二种方法
- 第二种方法,将所有插件的拉起代理方法的逻辑,统一在AppDelegate文件中来处理,代码如下:
在头部引入
//如果是swift,请在桥接文件(一般命名为XXX-Bridging-Header.h)中引入
#import <openinstall_flutter_plugin/OpeninstallFlutterPlugin.h>
添加如下方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
//处理通过openinstall一键唤起App时传递的数据
[OpeninstallFlutterPlugin continueUserActivity:userActivity];
//其他第三方回调:
return YES;
}
swift代码:
//swift4.2之前版本
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool{
//处理通过openinstall一键唤起App时传递的数据
OpeninstallFlutterPlugin.continue(userActivity)
//其他第三方回调:
return true
}
//swift4.2版本开始,系统方法修改为:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool{
//处理通过openinstall一键唤起App时传递的数据
OpeninstallFlutterPlugin.continue(userActivity)
//其他第三方回调:
return true
}
scheme 配置
添加应用对应的 scheme,可在工程“TARGETS -> Info -> URL Types” 里快速添加,图文请看
scheme配置
注意:插件版本>=1.3.1开始,iOS通用链接原生代码已在插件内部完成
1) 1.3.1之前版本升级后可不做任何改动
2)首次集成插件的用户,如果拉起无法获取到参数,是因为方法被其它插件覆盖导致(openinstall插件不会覆盖其它插件),可以有两种方法解决:
- 第一种方法,提早加载openinstall插件,无效的话使用第二种方法
- 第二种方法,将所有插件的拉起代理方法的逻辑,统一在AppDelegate文件中来处理,代码如下:
在ios/Runner/AppDelegate.m中头部引入:
//如果是swift,请在桥接文件(一般命名为XXX-Bridging-Header.h)中引入
#import <openinstall_flutter_plugin/OpeninstallFlutterPlugin.h>
在ios/Runner/AppDelegate.m中添加方法:
//适用目前所有iOS版本
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
//判断是否通过OpenInstall URL Scheme 唤起App
[OpeninstallFlutterPlugin handLinkURL:url];
//其他第三方回调;
return YES;
}
//iOS9以上,会优先走这个方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary *)options{
//判断是否通过OpenInstall URL Scheme 唤起App
[OpeninstallFlutterPlugin handLinkURL:url];
//其他第三方回调;
return YES;
}
swift代码:
//swift引用OC方法时,最好根据系统代码提示来写
//适用目前所有iOS版本
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
OpeninstallFlutterPlugin.handLinkURL(url)
return true
}
//iOS9以上,会优先走这个方法
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
OpeninstallFlutterPlugin.handLinkURL(url)
return true
}
//注意,swift4.2版本开始,系统方法修改为:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool{}
三、使用
初始化
init(EventHandler wakeupHandler)
初始化时,需要传入拉起回调获取 web 端传过来的动态参数
示例:
Future wakeupHandler(Map<String, dynamic> data) async {
setState(() {
debugLog = "wakeup result : channel=" +
data['channelCode'] +
", data=" +
data['bindData'];
});
}
_openinstallFlutterPlugin.init(wakeupHandler);
获取安装参数
install(EventHandler installHandler, [int seconds = 10])
在 APP 需要安装参数时(由 web 网页中传递过来的,如邀请码、游戏房间号等动态参数),调用此接口,在回调中获取参数
示例:
Future installHandler(Map<String, dynamic> data) async {
setState(() {
debugLog = "install result : channel=" +
data['channelCode'] +
", data=" +
data['bindData'];
});
}
_openinstallFlutterPlugin.install(installHandler);
注册统计
reportRegister()
如需统计每个渠道的注册量(对评估渠道质量很重要),可根据自身的业务规则,在确保用户完成 APP 注册的情况下调用此接口
示例:
_openinstallFlutterPlugin.reportRegister();
效果点统计
reportEffectPoint(String pointId, int pointValue)
效果点建立在渠道基础之上,主要用来统计终端用户对某些特殊业务的使用效果。调用此接口时,请使用后台创建的 “效果点ID” 作为 pointId
示例:
_openinstallFlutterPlugin.reportEffectPoint("effect_test", 1);
四、导出apk/ipa包并上传
集成完毕后,通过云编译导出iOS/Android安装包上传openinstall控制台,openinstal会检查应用的集成配置
上传ipa安装包
上传完成后即可开始在线模拟测试,体验完整的App安装/拉起流程
在线测试












网友评论