Skip to content

Commit 867e779

Browse files
author
刘伟强
committed
Merge branch 'cqs_feature_visualized' into 'master'
[feature] 支持 flutter 可视化全埋点 See merge request sensors-analytics/sdk/sensors_analytics_flutter_plugin!17
2 parents 76a823f + e18bf6b commit 867e779

File tree

9 files changed

+284
-23
lines changed

9 files changed

+284
-23
lines changed

android/build.gradle

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ buildscript {
55
repositories {
66
google()
77
mavenCentral()
8+
maven {
9+
url '/Users/zhangwei/Documents/work/android_workspace/sa-sdk-android/repo'
10+
}
811
}
912

1013
dependencies {
@@ -16,6 +19,10 @@ rootProject.allprojects {
1619
repositories {
1720
google()
1821
mavenCentral()
22+
maven {
23+
url '/Users/zhangwei/Documents/work/android_workspace/sa-sdk-android/repo'
24+
}
25+
1926
}
2027
}
2128

@@ -33,6 +40,8 @@ android {
3340
}
3441

3542
dependencies {
36-
api 'com.sensorsdata.analytics.android:SensorsAnalyticsSDK:6.5.4'
37-
//implementation 'org.json:json:20220320'
43+
implementation fileTree(dir: 'libs', include: ['*.jar'])
44+
// api files('libs/SensorsAnalyticsSDK-6.3.5.2.aar')
45+
api 'com.sensorsdata.analytics.android:SensorsAnalyticsSDK:6.5.3-build1'
46+
// implementation 'org.json:json:20220320'
3847
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.sensorsdata.analytics.sensorsanalyticsflutterplugin;
2+
3+
import android.content.BroadcastReceiver;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.content.IntentFilter;
7+
8+
import com.sensorsdata.analytics.android.sdk.SALog;
9+
10+
import io.flutter.plugin.common.MethodChannel;
11+
12+
public class FlutterVisual {
13+
private static final String TAG = "SA.FlutterVisual";
14+
private final DynamicReceiver mDynamicReceiver;
15+
private MethodChannel mMethodChannel;
16+
private static final String FLUTTER_ACTION = "android.intent.action.FLUTTER_VISUALIZED";
17+
private static final String FLUTTER_EXTRA = "visualizedChanged";
18+
private volatile boolean isRegister = false;
19+
private static volatile FlutterVisual mFlutterVisual;
20+
21+
private FlutterVisual() {
22+
mDynamicReceiver = new DynamicReceiver();
23+
}
24+
25+
public static FlutterVisual getInstance() {
26+
if (mFlutterVisual == null) {
27+
synchronized (FlutterVisual.class) {
28+
if (mFlutterVisual == null) {
29+
mFlutterVisual = new FlutterVisual();
30+
}
31+
}
32+
}
33+
return mFlutterVisual;
34+
}
35+
36+
public void setMethodChannel(MethodChannel methodChannel) {
37+
this.mMethodChannel = methodChannel;
38+
}
39+
40+
class DynamicReceiver extends BroadcastReceiver {
41+
@Override
42+
public void onReceive(Context context, Intent intent) {
43+
if (mMethodChannel != null && intent != null && intent.getStringExtra(FLUTTER_EXTRA) != null) {
44+
if (intent.getStringExtra(FLUTTER_EXTRA).equals("visualizedConnectionStatusChanged")) {
45+
SALog.i(TAG, "visualizedConnectionStatusChanged");
46+
mMethodChannel.invokeMethod("visualizedConnectionStatusChanged", null);
47+
} else if (intent.getStringExtra(FLUTTER_EXTRA).equals("visualizedPropertiesConfigChanged")) {
48+
SALog.i(TAG, "visualizedPropertiesConfigChanged");
49+
mMethodChannel.invokeMethod("visualizedPropertiesConfigChanged", null);
50+
}
51+
}
52+
}
53+
}
54+
55+
public synchronized void registerBroadcast(Context context) {
56+
SALog.i(TAG, "registerBroadcast:" + isRegister);
57+
if (!isRegister) {
58+
SALog.i(TAG, "registerBroadcast");
59+
IntentFilter filter = new IntentFilter();
60+
filter.addAction(FLUTTER_ACTION);
61+
context.registerReceiver(mDynamicReceiver, filter);
62+
isRegister = true;
63+
}
64+
}
65+
66+
public synchronized void unRegisterBroadcast(Context context) {
67+
SALog.i(TAG, "unRegisterBroadcast");
68+
context.unregisterReceiver(mDynamicReceiver);
69+
isRegister = false;
70+
}
71+
}

android/src/main/java/com/sensorsdata/analytics/sensorsanalyticsflutterplugin/SensorsAnalyticsFlutterPlugin.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import com.sensorsdata.analytics.android.sdk.SAConfigOptions;
99
import com.sensorsdata.analytics.android.sdk.SALog;
1010
import com.sensorsdata.analytics.android.sdk.SensorsDataAPI;
11+
import com.sensorsdata.analytics.android.sdk.core.mediator.Modules;
12+
import com.sensorsdata.analytics.android.sdk.core.mediator.SAModuleManager;
1113
import com.sensorsdata.analytics.android.sdk.plugin.property.SAPropertyPlugin;
1214
import com.sensorsdata.analytics.android.sdk.plugin.property.SAPropertyPluginPriority;
1315
import com.sensorsdata.analytics.android.sdk.plugin.property.beans.SAPropertiesFetcher;
@@ -44,13 +46,26 @@ public class SensorsAnalyticsFlutterPlugin implements FlutterPlugin, MethodCallH
4446
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
4547
channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "sensors_analytics_flutter_plugin");
4648
channel.setMethodCallHandler(this);
49+
FlutterVisual.getInstance().setMethodChannel(channel);
50+
FlutterVisual.getInstance().registerBroadcast(flutterPluginBinding.getApplicationContext());
4751
}
4852

4953
@Override
5054
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
5155
try {
5256
List list = (List) call.arguments;
5357
switch (call.method) {
58+
case "getVisualizedConnectionStatus":
59+
result.success(SAModuleManager.getInstance().invokeModuleFunction(Modules.Visual.MODULE_NAME, Modules.Visual.METHOD_GET_VISUAL_STATE));
60+
break;
61+
case "sendVisualizedMessage":
62+
String msg = (String) list.get(0);
63+
SAModuleManager.getInstance().invokeModuleFunction(Modules.Visual.MODULE_NAME, Modules.Visual.METHOD_SEND_VISUALIZED_MESSAGE, msg);
64+
result.success(null);
65+
break;
66+
case "getVisualizedPropertiesConfig":
67+
result.success(SAModuleManager.getInstance().invokeModuleFunction(Modules.Visual.MODULE_NAME, Modules.Visual.METHOD_FLUTTER_GET_APPVISUAL_CONFIG));
68+
break;
5469
case "setServerUrl":
5570
setServerUrl(list);
5671
break;
@@ -201,6 +216,7 @@ public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
201216
@Override
202217
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
203218
channel.setMethodCallHandler(null);
219+
FlutterVisual.getInstance().unRegisterBroadcast(binding.getApplicationContext());
204220
}
205221

206222
private void isNetworkRequestEnable(Result result) {

example/ios/Podfile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ flutter_ios_podfile_setup
2929

3030
target 'Runner' do
3131
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
32-
3332
end
3433

3534
post_install do |installer|

example/ios/Runner/AppDelegate.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,15 @@ - (BOOL)application:(UIApplication *)application
3333
return [super application:application didFinishLaunchingWithOptions:launchOptions];;
3434
}
3535

36+
37+
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
38+
39+
if ([[SensorsAnalyticsSDK sharedInstance] canHandleURL:url]) {
40+
[[SensorsAnalyticsSDK sharedInstance] handleSchemeUrl:url];
41+
}
42+
43+
return NO;
44+
}
45+
46+
3647
@end

example/ios/Runner/Info.plist

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@
1818
<string>$(FLUTTER_BUILD_NAME)</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
21+
<key>CFBundleURLTypes</key>
22+
<array>
23+
<dict>
24+
<key>CFBundleTypeRole</key>
25+
<string>Editor</string>
26+
<key>CFBundleURLName</key>
27+
<string>qatest</string>
28+
<key>CFBundleURLSchemes</key>
29+
<array>
30+
<string>sace7b04ba</string>
31+
</array>
32+
</dict>
33+
</array>
2134
<key>CFBundleVersion</key>
2235
<string>$(FLUTTER_BUILD_NUMBER)</string>
2336
<key>LSRequiresIPhoneOS</key>

example/test/widget_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import 'package:flutter/material.dart';
99
import 'package:flutter_test/flutter_test.dart';
1010

11-
import 'package:sensorsanalyticsflutterplugin_example/main.dart';
11+
import 'package:sensorsanalyticsflutterplugin_example/main_another_entry.dart';
1212

1313
void main() {
1414
testWidgets('Verify Platform version', (WidgetTester tester) async {

0 commit comments

Comments
 (0)