firebase analytics implemented & improvement.

development
Sikander Saleem 5 years ago
parent f94177e645
commit a8ba7467cb

@ -57,7 +57,9 @@ android {
flutter { flutter {
source '../..' source '../..'
} }
apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.google.firebase:firebase-analytics:17.4.1'
} }

@ -0,0 +1,46 @@
{
"project_info": {
"project_number": "991502296436",
"project_id": "tangheemcom",
"storage_bucket": "tangheemcom.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:991502296436:android:c51807fe0a1b9be358b821",
"android_client_info": {
"package_name": "com.cloudsolutions.tangheem"
}
},
"oauth_client": [
{
"client_id": "991502296436-e75nl9l5ph9l8ccgs13p912dfq08nvgc.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyA_qjuXPTR3KR2KoXWLwijkA9lhkwhWaVs"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "991502296436-e75nl9l5ph9l8ccgs13p912dfq08nvgc.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "991502296436-alfpp5j6d8m38aaue7o12fnls9gk44hh.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.cloudsolutions.tangheem"
}
}
]
}
}
}
],
"configuration_version": "1"
}

@ -7,6 +7,7 @@ buildscript {
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.android.tools.build:gradle:3.5.0'
classpath 'com.google.gms:google-services:4.3.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }

@ -1,3 +1,4 @@
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:tangheem/models/authentication_user_model.dart'; import 'package:tangheem/models/authentication_user_model.dart';
import 'package:tangheem/models/content_info_model.dart'; import 'package:tangheem/models/content_info_model.dart';
import 'package:tangheem/models/navigation_model.dart'; import 'package:tangheem/models/navigation_model.dart';
@ -43,4 +44,12 @@ class AppState {
void setNavigationModel(NavigationModel _navigationModel) { void setNavigationModel(NavigationModel _navigationModel) {
this._navigationModel = _navigationModel; this._navigationModel = _navigationModel;
} }
FirebaseAnalytics _analytics;
FirebaseAnalytics get getAnalytics => _analytics;
void setAnalytics(FirebaseAnalytics _analytics) {
this._analytics = _analytics;
}
} }

@ -1,10 +1,11 @@
class ApiConsts { class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server //static String baseUrl = "http://10.200.204.20:2801/"; // Local server
static String baseUrl = "https://api.cssynapses.com/tangheem/"; // Live server static String baseUrl = "http://20.203.25.82"; // Live server
static String authentication = baseUrl + "api/Authentication/"; static String baseUrlServices = baseUrl + "/services/"; // Live server
static String tangheemUsers = baseUrl + "api/TangheemUsers/"; static String authentication = baseUrlServices + "api/Authentication/";
static String adminConfiguration = baseUrl + "api/AdminConfiguration/"; static String tangheemUsers = baseUrlServices + "api/TangheemUsers/";
static String user = baseUrl + "api/User/"; static String adminConfiguration = baseUrlServices + "api/AdminConfiguration/";
static String user = baseUrlServices + "api/User/";
} }
class GlobalConsts { class GlobalConsts {

@ -1,5 +1,8 @@
import 'dart:io'; import 'dart:io';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:tangheem/ui/screens/bookmark_screen.dart'; import 'package:tangheem/ui/screens/bookmark_screen.dart';
@ -18,17 +21,23 @@ import 'ui/screens/registration_screen.dart';
import 'ui/screens/tangheem_detail_screen.dart'; import 'ui/screens/tangheem_detail_screen.dart';
import 'ui/screens/tangheem_screen.dart'; import 'ui/screens/tangheem_screen.dart';
void main() { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(Application()); runApp(Application());
} }
class Application extends StatelessWidget { class Application extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer = FirebaseAnalyticsObserver(analytics: analytics);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
title: 'Tangheem', title: 'Tangheem',
theme: lightTheme(), theme: lightTheme(),
debugShowCheckedModeBanner: false, debugShowCheckedModeBanner: false,
// navigatorObservers: <NavigatorObserver>[observer],
initialRoute: HomeScreen.routeName, initialRoute: HomeScreen.routeName,
onGenerateRoute: (settings) { onGenerateRoute: (settings) {
var className; var className;
@ -43,7 +52,7 @@ class Application extends StatelessWidget {
className = CommonAppbar(child: ForgotPasswordScreen()); className = CommonAppbar(child: ForgotPasswordScreen());
break; break;
case HomeScreen.routeName: case HomeScreen.routeName:
className = CommonAppbar(showDrawer: true, child: HomeScreen()); className = CommonAppbar(showDrawer: true, child: HomeScreen(analytics));
break; break;
case ContactUsScreen.routeName: case ContactUsScreen.routeName:
className = CommonAppbar(child: ContactUsScreen()); className = CommonAppbar(child: ContactUsScreen());
@ -84,6 +93,18 @@ class Application extends StatelessWidget {
if (className == null) { if (className == null) {
return null; return null;
} }
var eventName = settings.name;
eventName = eventName.replaceAll("/", "");
if (eventName.isEmpty) eventName = "home";
try {
analytics.setCurrentScreen(
screenName: eventName,
screenClassOverride: eventName,
).then((value) => print("EventSent:$eventName"));
} catch (ex) {
print("Analytics:$ex");
}
return goToNavigation(className); return goToNavigation(className);
}, },
); );

@ -1,3 +1,4 @@
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/painting.dart'; import 'package:flutter/painting.dart';
@ -15,8 +16,8 @@ import 'package:tangheem/widgets/common_dropdown_button.dart';
class HomeScreen extends StatefulWidget { class HomeScreen extends StatefulWidget {
static const String routeName = "/"; static const String routeName = "/";
final FirebaseAnalytics analytics;
HomeScreen({Key key}) : super(key: key); HomeScreen(this.analytics, {Key key}) : super(key: key);
@override @override
_HomeScreenState createState() { _HomeScreenState createState() {
@ -54,6 +55,9 @@ class _HomeScreenState extends State<HomeScreen> {
_surahList = _surahModel.data.map((element) => element.nameAR).toList(); _surahList = _surahModel.data.map((element) => element.nameAR).toList();
await getTangheemTypes(); await getTangheemTypes();
TangheemUserApiClient().addStatistics(1); TangheemUserApiClient().addStatistics(1);
AppState().setAnalytics(widget.analytics);
await widget.analytics.setAnalyticsCollectionEnabled(true);
await widget.analytics.setCurrentScreen(screenName: "home");
setState(() {}); setState(() {});
Utils.hideLoading(context); Utils.hideLoading(context);
} catch (ex) { } catch (ex) {
@ -144,6 +148,17 @@ class _HomeScreenState extends State<HomeScreen> {
_searchFocusNode.unfocus(); _searchFocusNode.unfocus();
_searchFocusNode.canRequestFocus = false; _searchFocusNode.canRequestFocus = false;
var data = {"tangheemTypeName": _tangheemListNotifier.value[_selectedTangheemType], "surahData": _surahModel.data[_selectedSurah]}; var data = {"tangheemTypeName": _tangheemListNotifier.value[_selectedTangheemType], "surahData": _surahModel.data[_selectedSurah]};
try {
await widget.analytics.logEvent(
name: 'tangheem_by_selection',
parameters: <String, dynamic>{
"tangheemTypeName": _tangheemListNotifier.value[_selectedTangheemType],
"surahName": _surahModel.data[_selectedSurah].nameAR,
},
);
} catch (ex) {
print("tangheemTypeName:$ex");
}
await Navigator.pushNamed(context, TangheemScreen.routeName, arguments: data); await Navigator.pushNamed(context, TangheemScreen.routeName, arguments: data);
_searchFocusNode.canRequestFocus = true; _searchFocusNode.canRequestFocus = true;
getTangheemTypes(); getTangheemTypes();
@ -200,6 +215,11 @@ class _HomeScreenState extends State<HomeScreen> {
} }
_searchFocusNode.canRequestFocus = false; _searchFocusNode.canRequestFocus = false;
var data = {"tangheemQuery": _searchController.text}; var data = {"tangheemQuery": _searchController.text};
await widget.analytics.setAnalyticsCollectionEnabled(true);
await widget.analytics.logEvent(
name: 'tangheem_by_search',
parameters: <String, dynamic>{"tangheemQuery": _searchController.text},
);
await Navigator.pushNamed(context, TangheemScreen.routeName, arguments: data); await Navigator.pushNamed(context, TangheemScreen.routeName, arguments: data);
_searchFocusNode.canRequestFocus = true; _searchFocusNode.canRequestFocus = true;
getTangheemTypes(); getTangheemTypes();

@ -15,6 +15,7 @@ import 'package:permission_handler/permission_handler.dart';
import 'package:share/share.dart'; import 'package:share/share.dart';
import 'package:tangheem/api/tangheem_user_api_client.dart'; import 'package:tangheem/api/tangheem_user_api_client.dart';
import 'package:tangheem/classes/colors.dart'; import 'package:tangheem/classes/colors.dart';
import 'package:tangheem/classes/consts.dart';
import 'package:tangheem/classes/utils.dart'; import 'package:tangheem/classes/utils.dart';
import 'package:tangheem/models/aya_tangheem_type_mapped.dart'; import 'package:tangheem/models/aya_tangheem_type_mapped.dart';
@ -49,7 +50,7 @@ class _AyaPlayerWidgetState extends State<AyaPlayerWidget> {
List<AudioSource> voiceList = []; List<AudioSource> voiceList = [];
if ((widget.voiceNoteList?.length ?? 0) > 0) { if ((widget.voiceNoteList?.length ?? 0) > 0) {
voiceList = widget.voiceNoteList.map((e) => AudioSource.uri(Uri.parse(e.exposeFilePath))).toList(); voiceList = widget.voiceNoteList.map((e) => AudioSource.uri(Uri.parse(ApiConsts.baseUrl + e.exposeFilePath))).toList();
} }
final _playlist = ConcatenatingAudioSource(children: voiceList); final _playlist = ConcatenatingAudioSource(children: voiceList);
@ -107,7 +108,7 @@ class _AyaPlayerWidgetState extends State<AyaPlayerWidget> {
children: [ children: [
Row( Row(
children: [ children: [
if(widget.voiceNoteList.length>1) if (widget.voiceNoteList.length > 1)
PopupMenuButton( PopupMenuButton(
padding: EdgeInsets.fromLTRB(4, 4, 0, 4), padding: EdgeInsets.fromLTRB(4, 4, 0, 4),
onSelected: (int index) { onSelected: (int index) {

@ -280,7 +280,6 @@ class _AyaRecordWidgetState extends State<AyaRecordWidget> {
Map<Permission, PermissionStatus> statuses = await [ Map<Permission, PermissionStatus> statuses = await [
Permission.storage, Permission.storage,
].request(); ].request();
return statuses[Permission.storage].isGranted; return statuses[Permission.storage].isGranted;
} }

@ -41,6 +41,8 @@ dependencies:
flutter_slidable: ^0.6.0 flutter_slidable: ^0.6.0
record_mp3: ^2.1.0 record_mp3: ^2.1.0
syncfusion_flutter_pdfviewer: ^19.1.59-beta syncfusion_flutter_pdfviewer: ^19.1.59-beta
firebase_core: ^1.3.0
firebase_analytics: ^8.1.2
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

Loading…
Cancel
Save