मैं एक नए ऐप की स्थापना कर रहा हूं, जो कि लोन के रूप में AngularJS का उपयोग कर रहा है। क्लाइंट साइड में सब कुछ HTML5 पुशस्टेट के साथ किया जाता है और मैं Google Analytics में अपने पृष्ठ दृश्य ट्रैक करने में सक्षम होना चाहूंगा।
मैं एक नए ऐप की स्थापना कर रहा हूं, जो कि लोन के रूप में AngularJS का उपयोग कर रहा है। क्लाइंट साइड में सब कुछ HTML5 पुशस्टेट के साथ किया जाता है और मैं Google Analytics में अपने पृष्ठ दृश्य ट्रैक करने में सक्षम होना चाहूंगा।
जवाबों:
यदि आप ng-view
अपने Angular ऐप का उपयोग कर रहे हैं, तो आप $viewContentLoaded
ईवेंट के लिए सुन सकते हैं और Google Analytics पर ट्रैकिंग ईवेंट पुश कर सकते हैं ।
यह मानते हुए कि आपने अपने ट्रैकिंग var _gaq
इंडेक्स को अपनी मुख्य index.html फ़ाइल में एक नाम और MyCtrl के साथ सेट किया है, जिसे आपने ng-controller
निर्देश में परिभाषित किया है ।
function MyCtrl($scope, $location, $window) {
$scope.$on('$viewContentLoaded', function(event) {
$window._gaq.push(['_trackPageView', $location.url()]);
});
}
अद्यतन: गूगल-एनालिटिक्स के नए संस्करण के लिए यह एक का उपयोग करें
function MyCtrl($scope, $location, $window) {
$scope.$on('$viewContentLoaded', function(event) {
$window.ga('send', 'pageview', { page: $location.url() });
});
}
_trackPageview
और नहीं _trackPageView
... सिर को खरोंचने के 10 मिनट खर्च किए :)
$rootScope.$on('$routeChangeSuccess', ...)
$rootScope
की गारंटी होगी कि इसे किसी अन्य घटना या DOM परिवर्तन द्वारा नहीं हटाया जाएगा, और उपयोग करने routeChangeSuccess
से हर बार आग लग जाएगी स्थान बार परिवर्तन, केवल समय के बजाय आप अपना दृश्य स्रोत टेम्पलेट बदलते हैं। क्या इसका कोई मतलब है?
$window.ga('send', 'pageview', { page: $location.path() });
बजाय है $window._gaq...
। इसके अलावा, आप ga('send', 'pageview');
किसी पृष्ठ पर पहली बार आने पर डुप्लिकेट को रोकने के लिए अपने मूल GA कोड से निकालना चाह सकते हैं ।
जब कोई नया दृश्य लोड किया जाता है AngularJS
, तो Google Analytics इसे नए पृष्ठ लोड के रूप में नहीं गिनता है। सौभाग्य से एक पृष्ठ के रूप में एक url लॉग करने के लिए GA को मैन्युअल रूप से बताने का एक तरीका है।
_gaq.push(['_trackPageview', '<url>']);
काम करेंगे, लेकिन उसे एंगुलरजेएस के साथ कैसे बांधेंगे?
यहाँ एक सेवा है जिसका आप उपयोग कर सकते हैं:
(function(angular) {
angular.module('analytics', ['ng']).service('analytics', [
'$rootScope', '$window', '$location', function($rootScope, $window, $location) {
var track = function() {
$window._gaq.push(['_trackPageview', $location.path()]);
};
$rootScope.$on('$viewContentLoaded', track);
}
]);
}(window.angular));
जब आप अपने कोणीय मॉड्यूल को परिभाषित करते हैं, तो एनालिटिक्स मॉड्यूल को शामिल करें जैसे:
angular.module('myappname', ['analytics']);
अद्यतन :
आपको नए यूनिवर्सल Google Analytics ट्रैकिंग कोड का उपयोग करना चाहिए:
$window.ga('send', 'pageview', {page: $location.url()});
this.track = function($window.ga('send', 'pageview', {page: $location.url()});
यह आपको googleAnalytics.track();
अपने app.run () फ़ंक्शन के भीतर उपयोग करने की अनुमति देगा
app.run(function ($rootScope, $location) {
$rootScope.$on('$routeChangeSuccess', function(){
ga('send', 'pageview', $location.path());
});
});
app.run(["$rootScope", "$location", function(...
बस एक त्वरित इसके अलावा। यदि आप नए analytics.js का उपयोग कर रहे हैं, तो:
var track = function() {
ga('send', 'pageview', {'page': $location.path()});
};
इसके अतिरिक्त एक टिप यह है कि गूगल एनालिटिक्स लोकलहोस्ट पर फायर नहीं करेगा। इसलिए यदि आप लोकलहोस्ट पर परीक्षण कर रहे हैं, तो डिफ़ॉल्ट बनाएं ( पूर्ण प्रलेखन ) के बजाय निम्नलिखित का उपयोग करें
ga('create', 'UA-XXXX-Y', {'cookieDomain': 'none'});
$window
खिड़की का उपयोग करने के लिए उपयोग करते हैं ( ga
अकेले कोणीय के अंदर बहुत संभावना है undefined
)। इसके अलावा, आप ga('send', 'pageview');
किसी पृष्ठ पर पहली बार आने पर डुप्लिकेट को रोकने के लिए अपने मूल GA कोड से निकालना चाह सकते हैं ।
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) { ga('send', 'pageview', { 'page': $location.path(), 'title': toState.name }); });
$location.url()
मैंने एक सेवा + फ़िल्टर बनाया है जो इस से आप लोगों की मदद कर सकता है, और शायद कुछ अन्य प्रदाताओं के साथ भी अगर आप भविष्य में उन्हें जोड़ना चाहते हैं।
की जाँच करें https://github.com/mgonto/angularytics और मुझे पता है कि यह कैसे आप के लिए बाहर काम करता है।
Wynnwu और dpineda द्वारा उत्तरों को जोड़ना मेरे लिए काम किया गया था।
angular.module('app', [])
.run(['$rootScope', '$location', '$window',
function($rootScope, $location, $window) {
$rootScope.$on('$routeChangeSuccess',
function(event) {
if (!$window.ga) {
return;
}
$window.ga('send', 'pageview', {
page: $location.path()
});
});
}
]);
तीसरे पैरामीटर को ऑब्जेक्ट के रूप में सेट करना (केवल $ location.path () के बजाय) और $ pathChangeSuccess का उपयोग करके $ StateChangeSuccess के बजाय ट्रिक किया।
उम्मीद है की यह मदद करेगा।
मैंने उपर्युक्त दृष्टिकोण का उपयोग करके जीथब पर एक सरल उदाहरण बनाया है।
/account/:accountId
उर्फ मार्ग का मार्ग है http://somesite.com/account/123
तो क्या अब यह मार्ग रिपोर्ट करेगा/account?accountId=123
ऐसा करने का सबसे अच्छा तरीका Google श्रोता प्रबंधक का उपयोग इतिहास श्रोताओं के आधार पर आपके Google Analytics टैग को आग लगाने के लिए किया जाता है। ये GTM इंटरफ़ेस में बनाए गए हैं और क्लाइंट साइड HTML5 इंटरैक्शन पर आसानी से नज़र रखने की अनुमति देते हैं।
अंतर्निहित को सक्षम करें इतिहास चर को और इतिहास परिवर्तनों के आधार पर किसी घटना को आग लगाने के लिए ट्रिगर बनाएं।
अपने में index.html
, गा स्निपेट कॉपी और पेस्ट करें लेकिन लाइन हटा देंga('send', 'pageview');
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X');
</script>
मैं इसे my-google-analytics.js
स्वयं इंजेक्शन के साथ अपने कारखाने की फ़ाइल देना पसंद करता हूं :
angular.module('myApp')
.factory('myGoogleAnalytics', [
'$rootScope', '$window', '$location',
function ($rootScope, $window, $location) {
var myGoogleAnalytics = {};
/**
* Set the page to the current location path
* and then send a pageview to log path change.
*/
myGoogleAnalytics.sendPageview = function() {
if ($window.ga) {
$window.ga('set', 'page', $location.path());
$window.ga('send', 'pageview');
}
}
// subscribe to events
$rootScope.$on('$viewContentLoaded', myGoogleAnalytics.sendPageview);
return myGoogleAnalytics;
}
])
.run([
'myGoogleAnalytics',
function(myGoogleAnalytics) {
// inject self
}
]);
page
वर्तमान पथ के साथ क्यों सेट करते हैं , और फिर इसे एक के रूप में प्रस्तुत करते हैं pageview
? सिर्फ इसके बजाय इस तरह से करने से क्या फर्क पड़ता है $window.ga('send', 'pageview', {page: $location.url()});
?
मैंने पाया कि gtag()
इसके बजाय फ़ंक्शन ने काम कियाga()
।
Index.html फ़ाइल में, <head>
अनुभाग में:
<script async src="https://www.googletagmanager.com/gtag/js?id=TrackingId"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TrackingId');
</script>
AngularJS कोड में:
app.run(function ($rootScope, $location) {
$rootScope.$on('$routeChangeSuccess', function() {
gtag('config', 'TrackingId', {'page_path': $location.path()});
});
});
TrackingId
अपने खुद के ट्रैकिंग आईडी से बदलें ।
अगर कोई निर्देशों का उपयोग करके लागू करना चाहता है, तो index.html में एक div की पहचान करें (या बनाएं) (बस बॉडी टैग के तहत, या अन्य DOM स्तर पर)
<div class="google-analytics"/>
और फिर निर्देश में निम्नलिखित कोड जोड़ें
myApp.directive('googleAnalytics', function ( $location, $window ) {
return {
scope: true,
link: function (scope) {
scope.$on( '$routeChangeSuccess', function () {
$window._gaq.push(['_trackPageview', $location.path()]);
});
}
};
});
यदि आप यू-राउटर का उपयोग कर रहे हैं, तो आप $ StateChangeSuccess की सदस्यता इस तरह ले सकते हैं:
$rootScope.$on('$stateChangeSuccess', function (event) {
$window.ga('send', 'pageview', $location.path());
});
पूरी तरह से काम करने वाले उदाहरण के लिए इस ब्लॉग पोस्ट को देखें
यह सुनिश्चित करने के लिए कि Google realtime विश्लेषिकी के लिए मार्ग उठाए गए हैं, GA 'सेट' का उपयोग करें। अन्यथा GA के लिए बाद की कॉलें रियलटाइम पैनल में नहीं दिखाई देंगी।
$scope.$on('$routeChangeSuccess', function() {
$window.ga('set', 'page', $location.url());
$window.ga('send', 'pageview');
});
Google इस दृष्टिकोण को आमतौर पर 'send' में 3rd param पास करने के बजाय दृढ़ता से सलाह देता है। https://developers.google.com/analytics/devguides/collection/analyticsjs/single-page-applications
आप में से जो लोग ngRoute के बजाय AngularUI Router का उपयोग कर रहे हैं, वे पृष्ठ दृश्यों को ट्रैक करने के लिए निम्न कोड का उपयोग कर सकते हैं।
app.run(function ($rootScope) {
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
ga('set', 'page', toState.url);
ga('send', 'pageview');
});
});
सिंगल पेज एप्लिकेशन बनाने वाले डेवलपर्स ऑटोट्रैक का उपयोग कर सकते हैं , जिसमें एक urlChangeTracker प्लगइन शामिल है जो आपके लिए इस गाइड में सूचीबद्ध सभी महत्वपूर्ण विचारों को संभालता है। उपयोग और स्थापना निर्देशों के लिए ऑटोट्रैक प्रलेखन देखें ।
मैं html5 मोड में AngluarJS का उपयोग कर रहा हूं। मैंने निम्नलिखित समाधान को सबसे विश्वसनीय पाया:
कोणीय-गूगल-एनालिटिक्स लाइब्रेरी का उपयोग करें । इसे कुछ इस तरह से शुरू करें:
//Do this in module that is always initialized on your webapp
angular.module('core').config(["AnalyticsProvider",
function (AnalyticsProvider) {
AnalyticsProvider.setAccount(YOUR_GOOGLE_ANALYTICS_TRACKING_CODE);
//Ignoring first page load because of HTML5 route mode to ensure that page view is called only when you explicitly call for pageview event
AnalyticsProvider.ignoreFirstPageLoad(true);
}
]);
उसके बाद, $ StateChangeSuccess पर श्रोता जोड़ें और ट्रैकपेज इवेंट भेजें।
angular.module('core').run(['$rootScope', '$location', 'Analytics',
function($rootScope, $location, Analytics) {
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams, options) {
try {
Analytics.trackPage($location.url());
}
catch(err) {
//user browser is disabling tracking
}
});
}
]);
किसी भी समय, जब आपके पास आपका उपयोगकर्ता initalized है, तो आप वहां Analytics को इंजेक्ट कर सकते हैं और कॉल कर सकते हैं:
Analytics.set('&uid', user.id);
मैं यूआई-राउटर का उपयोग कर रहा हूं और मेरा कोड इस तरह दिखता है:
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams){
/* Google analytics */
var path = toState.url;
for(var i in toParams){
path = path.replace(':' + i, toParams[i]);
}
/* global ga */
ga('send', 'pageview', path);
});
इस तरह मैं विभिन्न राज्यों को ट्रैक कर सकता हूं। शायद किसी को यह उपयोगी लगेगा।
मैं व्यक्तिगत रूप से वर्तमान पथ के बजाय टेम्पलेट URL के साथ अपने विश्लेषिकी को स्थापित करना पसंद करता हूं। यह मुख्य रूप से है क्योंकि मेरे आवेदन में कई कस्टम पथ हैं जैसे message/:id
या profile/:id
। अगर मुझे ये रास्ते भेजने थे, तो मेरे पास इतने सारे पेज होंगे जिन्हें एनालिटिक्स के भीतर देखा जा सकता है, यह जांचना बहुत मुश्किल होगा कि कौन से पेज पर यूजर्स सबसे ज्यादा विजिट कर रहे हैं।
$rootScope.$on('$viewContentLoaded', function(event) {
$window.ga('send', 'pageview', {
page: $route.current.templateUrl.replace("views", "")
});
});
अब मुझे अपने विश्लेषिकी के भीतर user-profile.html
और message.html
इसके बजाय कई पृष्ठों के स्वच्छ पृष्ठ दृश्य मिलते हैं profile/1
, profile/2
औरprofile/3
। अब मैं रिपोर्ट देखने के लिए रिपोर्ट कर सकता हूं कि कितने लोग उपयोगकर्ता प्रोफाइल देख रहे हैं।
अगर किसी को इस बात पर कोई आपत्ति है कि यह एनालिटिक्स के भीतर बुरा व्यवहार क्यों है, तो मुझे इसके बारे में सुनकर ज्यादा खुशी होगी। Google Analytics का उपयोग करने के लिए काफी नया है, इसलिए यह सुनिश्चित नहीं है कि यह सबसे अच्छा तरीका है या नहीं।
मेरा सुझाव है कि सेगमेंट एनालिटिक्स लाइब्रेरी का उपयोग करें और हमारे कोणीय क्विकस्टार्ट गाइड का अनुसरण करें । आप एक ही एपीआई के साथ पृष्ठ के भ्रमण को ट्रैक करने और उपयोगकर्ता के व्यवहार को ट्रैक करने में सक्षम होंगे। यदि आपके पास एक एसपीए है, तो आप RouterOutlet
पृष्ठ को प्रस्तुत करने और कॉल ngOnInit
को आह्वान करने के लिए घटक को संभालने की अनुमति दे सकते page
हैं। नीचे दिए गए उदाहरण से पता चलता है कि आप ऐसा कैसे कर सकते हैं:
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
ngOnInit() {
window.analytics.page('Home');
}
}
मैं https://github.com/segmentio/analytics-angular का अनुचर हूं । सेगमेंट के साथ, यदि आप बिना कोई अतिरिक्त कोड लिखने के कई एनालिटिक्स टूल (हम 250+ से अधिक गंतव्यों का समर्थन करते हैं) को आज़माने के इच्छुक हैं, तो आप स्विच के फ्लिप द्वारा अलग-अलग गंतव्यों को बंद कर सकते हैं। 🙂
पेड्रो लोपेज के जवाब के साथ और भी विलय,
मैंने इसे अपने ngGoogleAnalytis मॉड्यूल में जोड़ा (जिसका मैं कई ऐप्स में पुन: उपयोग करता हूं):
var base = $('base').attr('href').replace(/\/$/, "");
इस मामले में, मेरे पास अपनी अनुक्रमणिका लिंक में एक टैग है:
<base href="/store/">
यह उपयोगी है जब html5 मोड को angular.js v1.3 पर उपयोग किया जाता है
(यदि आपका आधार टैग स्लैश / से समाप्त नहीं होता है तो रिप्लेसमेंट () फंक्शन कॉल को हटा दें)
angular.module("ngGoogleAnalytics", []).run(['$rootScope', '$location', '$window',
function($rootScope, $location, $window) {
$rootScope.$on('$routeChangeSuccess',
function(event) {
if (!$window.ga) { return; }
var base = $('base').attr('href').replace(/\/$/, "");
$window.ga('send', 'pageview', {
page: base + $location.path()
});
}
);
}
]);
यदि आप Google Analytics के नए ट्रैकिंग कोड के पूर्ण नियंत्रण की तलाश में हैं, तो आप मेरे बहुत ही कोणीय-GA का उपयोग कर सकते हैं ।
यह ga
इंजेक्शन के माध्यम से उपलब्ध करता है, इसलिए यह परीक्षण करना आसान है। यह किसी भी जादू नहीं करता है, इसके अलावा हर मार्ग पर परिवर्तन सेट करें। आपको अभी भी यहाँ की तरह पेजव्यू भेजना है।
app.run(function ($rootScope, $location, ga) {
$rootScope.$on('$routeChangeSuccess', function(){
ga('send', 'pageview');
});
});
अतिरिक्त वहाँ एक निर्देश है ga
जो घटनाओं के लिए कई विश्लेषिकी कार्यों को बांधने की अनुमति देता है, जैसे:
<a href="#" ga="[['set', 'metric1', 10], ['send', 'event', 'player', 'play', video.id]]"></a>