gpt4 book ai didi

android - GoogleAnalytics.getInstance(this) 没有响应

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:28 25 4
gpt4 key购买 nike

我有一个 Android 应用程序,我向其中添加了 Google Analytics Tracker,它可以正常工作(我可以在 Analytics 面板中看到 View )。

问题是有时应用程序开始加载然后卡住并且不再响应。我试着调试它,我发现当涉及到这一行时

  GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);

有时没有反应。

为什么会发生这种情况,我该如何解决?

编辑:

我添加了可选的 analytics_global_config,它仍然发生

<meta-data
android:name="com.google.android.gms.analytics.globalConfigResource"
android:resource="@xml/analytics_global_config" />

analytics_global_config.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ga_appName">HebConvertor</string>
<string name="ga_appVersion">1.0</string>
<string name="ga_logLevel">verbose</string>
<integer name="ga_dispatchPeriod">1000</integer>
<bool name="ga_dryRun">false</bool>
</resources>

我的申请:

import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.Tracker;
import android.app.Application;

public class MyApplication extends Application {

// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID = "XX-XXXXXXXX-X";

public enum TrackerName {
APP_TRACKER, // Tracker used only in this app.
GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

public MyApplication() {
super();
}

synchronized Tracker getTracker(TrackerName trackerId) {
if (!mTrackers.containsKey(trackerId)) {

GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(R.xml.app_tracker)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(PROPERTY_ID)
: analytics.newTracker(R.xml.app_tracker);
mTrackers.put(trackerId, t);
}
return mTrackers.get(trackerId);
}
}

app_tracker.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="TypographyDashes">
<!-- tools:ignore="TypographyDashes" -->
<!-- The apps Analytics Tracking Id -->
<string name="ga_trackingId">XX-XXXXXXXX-X</string>

<!-- Percentage of events to include in reports -->
<string name="ga_sampleFrequency">100.0</string>

<!-- Enable automatic Activity measurement -->
<bool name="ga_autoActivityTracking">true</bool>

<!-- catch and report uncaught exceptions from the app -->
<bool name="ga_reportUncaughtExceptions">true</bool>

<!-- How long a session exists before giving up -->
<integer name="ga_sessionTimeout">-1</integer>

<!-- If ga_autoActivityTracking is enabled, an alternate screen name can be specified to
substitute for the full length canonical Activity name in screen view hit. In order to
specify an alternate screen name use an <screenName> element, with the name attribute
specifying the canonical name, and the value the alias to use instead. -->
<screenName name="com.example.myapplication.MainActivity">MainActivity</screenName>

</resources>

主要 Activity :

    public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
getOverflowMenu();
}

@Override
public void onStart() {
super.onStart();
//Get an Analytics tracker to report app starts & uncaught exceptions etc.
GoogleAnalytics.getInstance(this).reportActivityStart(this);
}

@Override
public void onStop() {
super.onStop();
//Stop the analytics tracking
GoogleAnalytics.getInstance(this).reportActivityStop(this);
}

public static class PlaceholderFragment extends Fragment {

public PlaceholderFragment() {
}

protected InterstitialAd interstitial;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);

// Get tracker.
Tracker t = ((MyApplication)getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);
// Set screen name.
t.setScreenName("MainActivity");

...
}

}
}

最佳答案

这是 Google Play Services 6.5 的一个已知问题。参见 Android GoogleAnalytics getInstance了解详情。

此问题已在 2015 年 3 月 19 日发布的 Google Play Services 7.0 中得到修复。 http://developer.android.com/google/play-services/index.html

如果您必须使用 Play Services 6.5,解决方法是从代码而不是 xml 配置 Google Analytics,或者降级到 Google Play Services 6.1。

添加到您的 Application 类中的以下代码等同于您的 list 配置:

public class MyApplication extends Application  {
//...
private Tracker mTracker;
public synchronized Tracker getAppTracker() {
if (mTracker == null) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this)
mTracker = analytics.newTracker("XX-XXXXXXXX-X"); // Replace with your real tracker id
mTracker.enableAutoActivityTracking(true);
mTracker.enableExceptionReporting(true);
mTracker.setSessionTimeout(-1);

// mTracker.setSampleRate(100.0d); // Not needed. The default sampling rate it 100%
}
return mTracker;
}
}

关于android - GoogleAnalytics.getInstance(this) 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com