Skip to content

Commit b375c8d

Browse files
author
梁登科
committed
Remove Android原生接入部分, 改为跳转官网接入
1 parent f2b9977 commit b375c8d

File tree

4 files changed

+86
-118
lines changed

4 files changed

+86
-118
lines changed

README.md

+74-105
Original file line numberDiff line numberDiff line change
@@ -6,108 +6,77 @@ GrowingIO的埋点版本flutter插件.
66

77
# 一: 集成
88
## 1. Flutter插件获取安装
9-
根据[dart pub](https://pub.dartlang.org/packages/flutter_growingio_track#-installing-tab-) 文档获取安装
9+
根据[dart pub](https://pub.dartlang.org/packages/flutter_growingio_track#-installing-tab-)文档获取安装
1010

1111
## 2. Android集成(Native部分)
12+
此Flutter插件运行在Android手机上时依赖于GrowingIO Android SDK(可以是无埋点SDK也可以是埋点SDK)2.6.0及以上, 原生部分请参考[Android官方文档集成SDK部分(无埋点)](https://docs.growingio.com/docs/sdk-integration/android-sdk/#ji-cheng-sdk)[Android官方文档集成SDK部分(埋点)](https://docs.growingio.com/docs/sdk-integration/android-sdk/android-maidian-sdk)接入集成.
1213

13-
此Flutter插件可支持track版本与auto-track版本的GrowingIO SDK使用, 请根据需要自行选择搭配
14-
15-
### 1.1 添加Android依赖
16-
#### 依赖纯打点版本
17-
纯打点版本(track)版本, 需要依赖track版本的SDK
18-
19-
dependencies{
20-
implementation 'com.growingio.android:vds-android-agent:track-2.6.0'
21-
}
22-
23-
### 1.2 无埋点版本
24-
无埋点版本(auto-track)版本, 需要依赖于auto-track版本的SDK并且需要配置Gradle插件
25-
26-
*配置ClassPath:*
27-
28-
buildscript {
29-
repositories {
30-
jcenter()
31-
google()
32-
}
33-
dependencies {
34-
//gradle建议版本
35-
classpath 'com.android.tools.build:gradle:3.1.3'
36-
classpath 'com.growingio.android:vds-gradle-plugin:autotrack-2.6.0'
37-
}
38-
}
39-
40-
*使用插件:*
41-
42-
apply plugin: 'com.android.application'
43-
//添加插件
44-
apply plugin: 'com.growingio.android'
45-
46-
dependencies {
47-
compile 'com.growingio.android:vds-android-agent:autotrack-2.6.0@aar'
48-
}
49-
50-
### 2. 获取projectId与UrlScheme
51-
52-
在GrowingIO官网应用管理创建Android应用, 跳转界面后可以发现包含projectId与UrlSchema的代码片段, 请粘贴到项目对应位置:
53-
54-
android {
55-
defaultConfig {
56-
// xxxx
57-
resValue("string", "growingio_project_id", "9926fc6c1189e2fb")
58-
resValue("string", "growingio_url_scheme", "growing.da7e6c2879469314")
59-
// xxxx
60-
}
61-
}
62-
63-
另外为了可以从浏览器直接跳转App, 需要在Manifest中配置UrlSchema
64-
65-
<intent-filter>
66-
<data android:scheme="growing.da7e6c2879469314"/>
67-
<action android:name="android.intent.action.VIEW" />
68-
69-
<category android:name="android.intent.category.DEFAULT" />
70-
<category android:name="android.intent.category.BROWSABLE" />
71-
</intent-filter>
72-
73-
同时也需要配置权限(比如网络权限)
74-
75-
<uses-permission android:name="android.permission.INTERNET" />
76-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
77-
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
78-
79-
具体配置请参见项目的example配置
80-
81-
82-
### 3. 初始化SDK
83-
84-
GrowingIO的SDK需要在Application的onCreate中初始化:
85-
86-
GrowingIO.startWithConfiguration( this,
87-
new Configuration()
88-
.setChannel("渠道名")
89-
.setRnMode(true) // 这个必须设置
90-
.setDebugMode(true) // 显示日志, release环境请关闭
91-
.setTestMode(true)); // 即时发送, release环境请关闭
92-
93-
如果flutter项目没有自定义Application, 需要用户自己手动添加一个AndroidApplication, 可参照example
94-
95-
96-
### 4. tip
97-
98-
1. 为什么Android项目里面高亮GrowingIO的类会出现报红色
99-
100-
这个应该是Flutter项目结构问题,不过并不影响运行, 可以放心编译
101-
102-
2. 为什么不在flutter中初始化:
103-
104-
- 因为GrowingIO需要获取Android的Activity生命周期, 为了数据的准确性, 需要在Activity出现前就初始化完成
105-
- 开发者相信很多用户都会使用flutter + native形式的进行开发, 为了同时服务flutter于native
106-
107-
14+
可以参考仓库中的example项目.
10815

10916
## 3. iOS集成(Native部分)
110-
集成方式见Word文档:Flutter-iOS集成文档
17+
### 3.1 选择集成方式
18+
### 3.2 设置URL Scheme
19+
#### 3.2.1 获取URL Scheme
20+
- 添加新产品:登录官网 -> 点击项目选择框 -> 点击“项目管理” -> 点击“应用管理” -> 点击“新建应用”->选择添加 iOS 应用 -> 填写“应用名称“,点击下一步 ->在第二段中标黄字体。
21+
- 现有产品:登录官网 -> 点击项目选择框 -> 点击“项目管理” -> 点击“应用管理” -> 找到对应产品的 URL Scheme
22+
23+
#### 3.2.2 添加 URL Scheme(growing.xxxxxxxxxxxxxxxx)到项目中
24+
#### 3.2.3 添加依赖, 在项目中添加以下库文件:
25+
26+
| 库名称 | 类型 |
27+
| ----- | ------ |
28+
| Foundation.framework | 基础依赖库 |
29+
| Security.framework | 用于SSL连接 |
30+
| CoreTelephony.framework | 用于读取运营商名称 |
31+
| SystemConfiguration.framework | 用于判断网络状态 |
32+
| AdSupport.framework | 用于来源管理激活匹配 |
33+
| libicucore.tbd | 用于WebSocket |
34+
| ibsqlite3.tbd | 存储日志 |
35+
| CoreLocation.framework | 用于读取地理位置信息(如果您的app有权限) |
36+
37+
添加完成以后, 库的引用如下: 提醒:
38+
39+
(optional) GrowingIO推荐您添加AdSupport.framework依赖库,用于来源管理激活匹配,有利于您更好的分析的数据
40+
- 添加项目依赖库的位置在项目设置target -> 选项卡General -> Linked Frameworks and Libraries
41+
42+
#### 3.2.4 添加编译参数
43+
44+
45+
### 3.3 初始化SDK
46+
在 AppDelegate 中引入#import "Growing.h"并添加启动方法
47+
48+
#import "Growing.h"
49+
- (BOOL)application:(UIApplication *)application
50+
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
51+
...
52+
// 启动GrowingIO
53+
[Growing startWithAccountId:@"xxxxxxxxxxxxxxxx"]; //替换为您的ID
54+
// 其他配置
55+
// 开启Growing调试日志 可以开启日志
56+
// [Growing setEnableLog:YES];
57+
}
58+
59+
请确保将代码添加在上面描述的位置,添加到其他函数中或者异步 block 中可能导致数据不准确!
60+
61+
至此,您的SDK安装就成功了。登录 GrowingIO 进入产品安装页面执行“数据检测”,几分钟后就可以看到数据了。
62+
63+
## 4. Tips
64+
#### 4.1 IOS: App Store 提交应用
65+
如果您添加了库AdSupport.framework, GrowingIO则会启用 IDFA,所以在向 App Store 提交应用时,需要:
66+
- 对于问题 Does this app use the Advertising Identifier (IDFA),选择 YES。
67+
- 对于选项Attribute this app installation to a previously served advertisement,打勾。
68+
- 对于选项Attribute an action taken within this app to a previously served advertisement,打勾。
69+
70+
#### 4.2 IOS: 为什么 GrowingIO使用IDFA
71+
GrowingIO 使用 IDFA 来做来源管理激活设备的精确匹配,让你更好的衡量广告效果。如果你不希望跟踪这个信息,可以选择不引入 AdSupport.framework
72+
73+
#### 4.3 Android: 初始化Android SDK时, GrowingIO类可能会报红色
74+
这个应该是Flutter项目结构的问题, 并不影响运行, 可以放心编译. 不过需要手动import-_-|
75+
76+
#### 4.4 为什么不在flutter中单独初始化
77+
- 因为GrowingIO需要获取Android的Activity生命周期, 为了数据的准确性, 需要在Activity出现前就初始化完成
78+
- 开发者相信很多用户都会使用flutter + native形式的进行开发, 为了同时服务flutter于native
79+
11180

11281
# 二: API
11382

@@ -119,11 +88,11 @@ GrowingIO的SDK需要在Application的onCreate中初始化:
11988

12089
1. track发送自定义事件, 对应于cstm事件
12190

122-
| 参数 | 是否必填 | 说明 |
123-
|----------|----------|----------------|
124-
| eventId || 事件Id |
125-
| num || 数值, double型 |
126-
| variable || 变量, Map型 |
91+
| 参数 | 是否必填 | 说明 |
92+
|----------|----------|----------------|
93+
| eventId || 事件Id |
94+
| num || 数值, double型 |
95+
| variable || 变量, Map型 |
12796

12897
调用示例:
12998

@@ -155,9 +124,9 @@ GrowingIO的SDK需要在Application的onCreate中初始化:
155124

156125
4. setUserId设置登录用户Id, 对应于cs1字段
157126

158-
| 参数 | 类型 | 描述 |
159-
| ----- | ------ | ----- |
160-
| userId | String | 登录用户Id |
127+
| 参数 | 类型 | 描述 |
128+
| ----- | ------ | ----- |
129+
| userId | String | 登录用户Id |
161130

162131
函数原型: setUserId(String userId)
163132

flutter_growingio_track.iml

-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,5 @@
1515
<orderEntry type="sourceFolder" forTests="false" />
1616
<orderEntry type="library" name="Dart SDK" level="project" />
1717
<orderEntry type="library" name="Flutter Plugins" level="project" />
18-
<orderEntry type="library" name="Dart Packages" level="project" />
1918
</component>
2019
</module>

lib/flutter_growingio_track.dart

+9-9
Original file line numberDiff line numberDiff line change
@@ -6,35 +6,35 @@ class GrowingIO {
66
static const MethodChannel _channel =
77
const MethodChannel('flutter_growingio_track');
88

9-
10-
static Future<Null> track(String eventId, {double num, Map<String, dynamic> variable}) async{
9+
static Future<Null> track(String eventId,
10+
{double num, Map<String, dynamic> variable}) async {
1111
Map<String, dynamic> args = {"eventId": eventId};
12-
if(num != null){
12+
if (num != null) {
1313
args['num'] = num;
1414
}
15-
if(variable != null){
15+
if (variable != null) {
1616
args['variable'] = variable;
1717
}
1818
return await _channel.invokeMethod("track", args);
1919
}
2020

21-
static Future<Null> setEvar(Map<String, dynamic> variable) async{
21+
static Future<Null> setEvar(Map<String, dynamic> variable) async {
2222
return await _channel.invokeMethod("setEvar", variable);
2323
}
2424

25-
static Future<Null> setPeopleVariable(Map<String, dynamic> variable) async{
25+
static Future<Null> setPeopleVariable(Map<String, dynamic> variable) async {
2626
return await _channel.invokeMethod("setPeopleVariable", variable);
2727
}
2828

29-
static Future<Null> setUserId(String userId) async{
29+
static Future<Null> setUserId(String userId) async {
3030
return await _channel.invokeMethod("setUserId", {"userId": userId});
3131
}
3232

33-
static Future<Null> clearUserId() async{
33+
static Future<Null> clearUserId() async {
3434
return await _channel.invokeMethod("clearUserId");
3535
}
3636

37-
static Future<Null> setVisitor(Map<String, dynamic> variable) async{
37+
static Future<Null> setVisitor(Map<String, dynamic> variable) async {
3838
return await _channel.invokeMethod("setVisitor", variable);
3939
}
4040
}

pubspec.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: flutter_growingio_track
2-
description: Flutter Plugin For GrowingIO track
3-
version: 0.0.1
2+
description: Flutter Plugin For GrowingIO SDK, is used for calling GrowingIO api in flutter.
3+
version: 0.0.3
44
author: ldk <[email protected]>
5-
homepage: https://www.growingio.com
5+
homepage: https://github.com/growingio/flutter-growingio-track
66

77
environment:
88
sdk: ">=2.0.0-dev.68.0 <3.0.0"

0 commit comments

Comments
 (0)