温馨提示:这篇文档可能会花费你 10 分钟左右的时间阅读完成,但我们相信这 10 分钟你将有所收获,
在介绍如何使用之前,先看看 Bugtags 到底是做什么的吧! 如果你只想看 Bugtags Web 的使用说明,请点 这里。
Bugtags 是移动时代首选 Bug 管理系统,针对不同的使用场景,Bugtags 具有以下强大特性:
Bugtags 可以直接在应用中所见即所得提交 Bug,自动上传截图、操作步骤、控制台日志等数。
智能发现并上报所有崩溃数据,包含截图、堆栈、操作步骤、控制台日志等数据。
用户遇到问题只需手机摇一摇并标注,相关数据即可实时同步到你的管理云端。
强大的浏览器插件支持,任何网页 Bug 都可轻松标注并提交。
一、通过 CocoaPods 集成 SDK
BugtagsOptions -> trackingCrashes
参数;在你项目的 Podfile 中添加以下代码
1
|
pod 'Bugtags'
|
执行 pod 安装命令
1
|
pod install
|
如果无法获取到最新版本的 Bugtags SDK
,请运行以下命令更新本地的 pod
仓库
1
|
pod repo update
|
运行完成后,重新执行安装命令 pod install
pod
命令后,请确认在应用对应 target
的设置中,Build Settings
-> Linking
项下的 Other Linker Flags
中是否已自动添加 $(inherited)
,如果未添加,请手动添加AppDelegate.m
中导入头文件
1
|
#import <Bugtags/Bugtags.h>
|
如果是 Swift 项目,请在对应的 bridging-header.h 中导入
在项目 AppDelegate 的 application didFinishLaunchingWithOptions
方法中初始化 Bugtags
(请不要在异步线程中调用)
Objective-C
1 2 3 4 5 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Bugtags startWithAppKey:@"APP_KEY" invocationEvent:BTGInvocationEventBubble]; return YES; } |
Swift
1 2 3 4 5 |
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { Bugtags.startWithAppKey("APP_KEY", invocationEvent: BTGInvocationEventBubble) return true } |
如果你需要自定义 Bugtags
的功能,可以向 Bugtags
的初始化方法中传入 BugtagsOptions
参数:
Objective-C
1 2 3 4 5 6 7 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BugtagsOptions *options = [[BugtagsOptions alloc] init]; options.trackingCrashes = YES; // 具体可设置的属性请查看 Bugtags.h [Bugtags startWithAppKey:@"APP_KEY" invocationEvent:BTGInvocationEventBubble options:options]; return YES; } |
Swift
1 2 3 4 5 6 7 |
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let options = BugtagsOptions() options.trackingCrashes = true // 具体可设置的属性请查看 Bugtags.h Bugtags.startWithAppKey("APP_KEY", invocationEvent: BTGInvocationEventBubble, options: options) return true } |
编译运行 App,将会在 App 中看到一个小球,成功了!看不到悬浮球?
二、手动集成 SDK
BugtagsOptions -> trackingCrashes
参数;Bugtags.framework
和 Bugtags.bundle
文件夹拖到 Xcode 项目中 在应用的设置中,Build Phases
-> Link Binary With Libraries
里添加以下 framework
:
1 2 |
UIKit AVFoundation Foundation SystemConfiguration QuartzCore CoreLocation ImageIO Security CFNetwork |
重要! 在应用对应 target
的设置中,Build Settings
-> Linking
项下的 Other Linker Flags
中添加 -ObjC
(如果已有,则不需要再添加)注意 O,C 大写
添加 -ObjC 导致编译出错?
AppDelegate.m
中导入头文件
1
|
#import <Bugtags/Bugtags.h>
|
如果是 Swift 项目,请在对应的 bridging-header.h 中导入
在项目 AppDelegate 的 application didFinishLaunchingWithOptions
方法中初始化 Bugtags
(请不要在异步线程中调用)
Objective-C
1 2 3 4 5 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [Bugtags startWithAppKey:@"APP_KEY" invocationEvent:BTGInvocationEventBubble]; return YES; } |
Swift
1 2 3 4 5 |
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { Bugtags.startWithAppKey("APP_KEY", invocationEvent: BTGInvocationEventBubble) return true } |
如果你需要自定义 Bugtags
的功能,可以向 Bugtags
的初始化方法中传入 BugtagsOptions
参数:
Objective-C
1 2 3 4 5 6 7 |
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BugtagsOptions *options = [[BugtagsOptions alloc] init]; options.trackingCrashes = YES; // 具体可设置的属性请查看 Bugtags.h [Bugtags startWithAppKey:@"APP_KEY" invocationEvent:BTGInvocationEventBubble options:options]; return YES; } |
Swift
1 2 3 4 5 6 7 |
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let options = BugtagsOptions() options.trackingCrashes = true // 具体可设置的属性请查看 Bugtags.h Bugtags.startWithAppKey("APP_KEY", invocationEvent: BTGInvocationEventBubble, options: options) return true } |
编译运行 App,将会在 App 中看到一个小球,成功了!看不到悬浮球?
一、通过 Maven 集成 SDK
1.1.0
,如需更新,请修改并重新同步 build.gradle 文件;BugtagsOptions -> trackingCrashes
参数;小米手机悬浮小球
等问题,请查看:Android 常见问题;Cocos2d-x
游戏截屏,请参考集成文档;buildscript dependencies
: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' //**重要** classpath 'com.bugtags.library:bugtags-gradle:latest.integration' } } allprojects { repositories { jcenter() //注:repository 1 mavenCentral() //注:repository 2 } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
//应用插件 apply plugin: 'com.bugtags.library.plugin' //自动上传插件 bugtags { appKey APP_KEY //这里是你的 appKey appSecret APP_SECRET //这里是你的 appSecret,管理员在设置页可以查看 } dependencies { compile 'com.bugtags.library:bugtags-lib:latest.integration' } |
如下图:
在你的 Activity 基类
(或所有的 Activity)中添加3个回调:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package your.package.name; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import com.bugtags.library.Bugtags; public class BaseActivity extends Activity{ @Override protected void onResume() { super.onResume(); //注:回调 1 Bugtags.onResume(this); } @Override protected void onPause() { super.onPause(); //注:回调 2 Bugtags.onPause(this); } @Override public boolean dispatchTouchEvent(MotionEvent event) { //注:回调 3 Bugtags.onDispatchTouchEvent(this, event); return super.dispatchTouchEvent(event); } } |
继承 Application
,在 onCreate() 方法中初始化 Bugtags: 1 2 3 4 5 6 7 8 |
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //在这里初始化 Bugtags.start("APP_KEY", this, Bugtags.BTGInvocationEventBubble); } } |
AndroidManifest.xml
,使用 MyApplication
类,例如: 1 2 3 4 5 6 |
<application android:name=".MyApplication" android:label="@string/app_name" android:theme="@style/AppTheme" > .... </application> |
关于如何使用 Android Studio 以及 gradle,请参考 bugtags 博客系列文章。
1 2 3 4 5 6 7 8 9 10 |
BugtagsOptions options = new BugtagsOptions.Builder(). trackingLocation(true).//是否获取位置 trackingCrashLog(true).//是否收集crash trackingConsoleLog(true).//是否收集console log trackingUserSteps(true).//是否收集用户操作步骤 versionName("1.0.1").//自定义版本名称 versionCode(10).//自定义版本号 build(); Bugtags.start("APP_KEY", this, Bugtags.BTGInvocationEventBubble, options); |
1 2 3 4 5 6 7 |
-keepattributes LineNumberTable,SourceFile -keep class com.bugtags.library.** {*;} -dontwarn org.apache.http.** -dontwarn android.net.http.AndroidHttpClient -dontwarn com.bugtags.library.vender.** -dontwarn com.bugtags.library.** |
Android 2.3(API 9)
及以上版本;集成有问题请进入 QQ 群:210286347;Let's embrace change
!二、手动集成 SDK
1.1.0
,如需更新,重新下载 SDK 进行集成;BugtagsOptions -> trackingCrashes
参数;小米手机悬浮小球
等问题,请查看:Android 常见问题;下载 SDK
import Bugtags-Android-Eclipse-Lib 到项目的工作空间
将其添加为您的工程的库依赖。
添加依赖这一步非常重要!
方法为:> 项目->右键->property->Android->Library中添加”Bugtags-Android-Eclipse-Lib”项目作为依赖,要十分注意
support-v4
包重复的问题!如下图:
1 2 3 4 5 6 7 8 9 10 |
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> |
1 2 3 4 5 6 7 8 9 10 11 12 |
<activity android:name="com.bugtags.library.BugtagsActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/> <receiver android:name="com.bugtags.library.BugtagsReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> </intent-filter> </receiver> <service android:name="com.bugtags.library.BugtagsService"/> |
在你的 Activity 基类
(或所有的 Activity)中添加3个回调:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package your.package.name; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import com.bugtags.library.Bugtags; public class BaseActivity extends Activity{ @Override protected void onResume() { super.onResume(); //注:回调 1 Bugtags.onResume(this); } @Override protected void onPause() { super.onPause(); //注:回调 2 Bugtags.onPause(this); } @Override public boolean dispatchTouchEvent(MotionEvent event) { //注:回调 3 Bugtags.onDispatchTouchEvent(this, event); return super.dispatchTouchEvent(event); } } |
继承 Application
,在 onCreate() 方法中初始化 Bugtags: 1 2 3 4 5 6 7 8 |
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //在这里初始化 Bugtags.start("APP_KEY", this, Bugtags.BTGInvocationEventBubble); } } |
AndroidManifest.xml
,使用 MyApplication
类,例如: 1 2 3 4 5 6 |
<application android:name=".MyApplication" android:label="@string/app_name" android:theme="@style/AppTheme" > .... </application> |
1 2 3 4 5 6 7 8 9 10 |
BugtagsOptions options = new BugtagsOptions.Builder(). trackingLocation(true).//是否获取位置 trackingCrashLog(true).//是否收集crash trackingConsoleLog(true).//是否收集console log trackingUserSteps(true).//是否收集用户操作步骤 versionName("1.0.1").//自定义版本名称 versionCode(10).//自定义版本号 build(); Bugtags.start("APP_KEY", this, Bugtags.BTGInvocationEventBubble, options); |
1 2 3 4 5 6 7 |
-keepattributes LineNumberTable,SourceFile -keep class com.bugtags.library.** {*;} -dontwarn org.apache.http.** -dontwarn android.net.http.AndroidHttpClient -dontwarn com.bugtags.library.vender.** -dontwarn com.bugtags.library.** |
Android 2.3(API 9)
及以上版本;集成有问题请进入 QQ 群:210286347;集成 SDK 后,可在应用中所见即所得的提交 Bug,并且 Bugtags 会自动提交闪退 Bug
提交Bug主要分为以下几步:
SDK 集成后,会在应用界面上出现 Bugtags 浮动小球,通过点击小球提交 Bug。
在提交 Bug 前建议先登录,以确保团队成员可以看到 Bug 提交者。
点击小球后,会看到一个蓝色添加按钮,点击后 Bugtags 会自动将当前界面截屏。
点击界面上有错误的位置,即会弹出完善 Bug 信息的弹框,根据实际情况设置类型、优先级、指派人。
点击确定,即会在界面上显示一个 Bug 标签,若想继续增加,重复上述步骤即可,最多可以添加 3 个标签。
点击蓝色“对勾”按钮提交Bug。提交后,可在 Bugtags 云端 查看。
如果你在集成SDK中遇到问题,请查看 帮助
在你的首页中,可以通过导航栏中的添加应用按钮添加应用。
添加应用后会生成 App Key。将这个 App Key 粘贴到 SDK 中相应位置即可。
应用支持 iOS 、Android 和 Web 三种类型。
显示了当前应用状态,基本信息、最新的应用状态,以及目前指派给你的问题、你提交过的问题以及你跟踪的问题。
当前应用中的所有问题,可通过左侧筛选栏过滤,也可通过右侧列表上方的搜索进行关键字查找问题,
在列表中,一个问题可以包含3个标签,可轻松通过右侧的操作按钮,更换标签状态、优先级、指派人。
左侧的筛选支持对标签类型、状态、优先级、版本号、指派人、提交人、你跟踪的以及时间段进行过滤,并且可以对筛选条件进行保存。
右侧的列表中,支持搜索、排序,以及将结果集导出到 Excel。
管理员可以进行批量删除以及批量修改标签状态操作。
如下图:
详情页分为左右两个区域,左侧问题操作区,右侧为展示区。如图:
可对标签的状态、类型、优先级、指派人、跟踪者进行修改。
重复标签可以指定哪个标签与此标签重复,方便查找。删除标签是应用管理员才可以使用的功能。
展示区中分为 5 个 栏目,设备信息、用户数据、用户步骤、控制台日志、Bugtags 日志,可以查看到这个问题更为详细的信息。
Bugtags 支持自动捕捉崩溃功能,当应用崩溃后,Bugtags 会记录当时的界面截图、设备信息,堆栈信息,
以及其它有助于定位 Bug 的数据。并且,系统将崩溃次数、影响机型、影响用户的统计数据进行了汇总,
如果这个崩溃发生在很多设备上,不会重复上报此问题,而会将此问题进行合并,汇总数据自动累加。
当应用重新被打开时,这些数据将会被提交到云管理平台。
点击详细数据后,会看到这个崩溃所涉及的设备信息及系统版本信息,可通过点击对某一设备查看详细数据。
在历史记录中,可以追溯到这个问题从开始到关闭的每一步操作,防止疏漏。并且可以进入留言,支持 @ 某人,或#链接其他标签。
并可以上传附件,支持文档、图片、压缩包以及安装包格式,当上传的是 apk 或 ipa 安装包时,会生成二维码,扫码后即可在手机中安装。
Bugtags 带有统计功能。可以查看当前应用的整体数据或切换版本查看最近两周每日的崩溃次数、各版本标签状态统计、累计标签按状态统计、
新增标签按状态统计、累计标签按类型统计、新增标签按类型统计、开发者标签状态统计、提交者标签状态统计,
同时还可以查看到崩溃的设备分布及系统分布,实时了解项目测试进度。
所有成员标签状态
崩溃数据分布
在后台中,同样有SDK的介绍以及示例应用,可以参照示例应用将 SDK 集成到应用当中。根据你的应用类型,显示相应的 SDK 集成方式。
在设置中,可以看到应用的基本信息,管理员有进行编辑和修改的权限。
在应用成员中,可以看到已经加入到这个应用中的所有成员。邀请成员需要有管理员权限。
管理员可以对应用成员进行管理,可设置其他成员为管理员,或移除成员操作。
邀请成员支持三种方式:批量邮箱邀请、导入其他应用中的成员和导入邀请过的成员,便于你快速将成员加入到新的应用中。
SDK 捕获上报的异常堆栈中通常都是地址信息,如果要显示详细的出错位置,则需要上传应用的符号表。
上传相应的符号表后,云端会自动将对应的符号表与崩溃信息匹配,使崩溃的堆栈信息更加详细。
有关上传符号表的步骤请 参考这里
可对邮件提醒进行自定义设置,避免邮件过多造成的困扰。
高级设置中,可以对默认指派者进行设置,以及设置是否允许匿名用户在 SDK 中提交问题。
有时候,你可能会提一些需求或者改进,而这个操作需要在电脑上完成,Bugtags 提供了 Web 新建问题功能,可以很好的将这些问题提交上去,
并且支持手机直传,比如你要提交一个 Bug,并需要上传一张手机中的图片,可以扫描手机直传二维码,
并在手机中选择图片,网页中将会自动同步这张图片。
同时,Bugtags 还为你提供了强大的 Chrome 截图插件和 Safari 截图插件,方便你在任何网页上截图并提交问题。
使用说明请点 这里
桌面通知是指你在打开 Bugtags 网站并处于登录状态,当最小化浏览器窗口或切换至其他窗口时,也能够收到通知提示,可以帮助你更加及时地收到相关问题的进度与状态,提高协作效率。
点击页面右上角头像后,点击可「桌面通知」设置。
关于浏览器配置桌面通知,请点这里