蒲公英Android安卓SDK是一款蒲公英应用内测专家的安卓SDK,我们的SDK,你们自己的风格。蒲公英SDK为你准备了多种自定义的方式,让你手机反馈的方式更加贴近你的产品。
册应用获取 App ID
App ID:唯一标识一个应用的 ID,在蒲公英上的每一个 App 都有一个唯一的 App ID,开发者可以在应用管理页面首页查看。
导入SDK
Eclipse用户
下载蒲公英 Android SDK(包含异常上报,在线更新,摇一摇反馈等功能)。
将 jar 包复制到工程的 libs 目录下面。
Android Studio用户 添加代码到project下的build.gradle文件中:
allprojects{ repositories{ jcenter() maven{url"https://raw.githubusercontent.com/Pgyer/mvn_repo_pgyer/master"} } }
然后在module下的build.gradle文件中添加依赖即可:
dependencies{ compile'com.pgyersdk:sdk:2.4.0' }
Android Studio工程示例代码
Android Studio用户除了可以使用以上方法集成SDK外,也可以使用和Eclipse用户相同的方法来集成SDK。
配置 AndroidManifest
<!--必选--> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!--获取网络状态--> <uses-permissionandroid:name="android.permission.INTERNET"/><!--网络通信--> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><!--获取设备信息--> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!--获取MAC地址--> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--读写sdcard,storage等等--> <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><!--允许程序录制音频--> <!--可选--> <uses-permissionandroid:name="android.permission.READ_LOGS"/><!--获取logcat日志--> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <!--可选--> <activityandroid:name="com.pgyersdk.activity.FeedbackActivity"/> <!--必选--> <meta-data android:name="PGYER_APPID" android:value="4b6e8877dfcc2462bedb37dcf66b6d87"> </meta-data> </application>
上报 Crash 异常
一、注册Crash接口(必选)
在 application 中集成,可以有机会捕捉更多的异常(推荐)
importcom.pgyersdk.crash.PgyCrashManager; importandroid.app.Application; publicclassPgyApplicationextendsApplication{ @Override publicvoidonCreate(){ //TODOAuto-generatedmethodstub super.onCreate(); PgyCrashManager.register(this); } }
在 AndroidManifest.xml 注意修改 android:name=".PgyApplication"此处的名字对应上面继承 Application 的类名
<application android:name=".PgyApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> </application>
2. 在 activity 中集成
importcom.pgyersdk.crash.PgyCrashManager; publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); PgyCrashManager.register(this); } }
3. 解除注册可以调用一下方法:
PgyCrashManager.unregister();
二、符号表配un置(可选)
通过 progurad 工具混淆时,工程目录下会自动生成符号表文件 mapping.txt
在后台配置符号表文件
上报 catch 异常
try { } catch(Exceptione) { PgyCrashManager.reportCaughtException(MainActivity.this,e); }
摇一摇用户反馈
普通的应用在 Activity 中添加如下代码即可
importcom.pgyersdk.feedback.PgyFeedbackShakeManager; publicclassMainActivityextendsActivity{ @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protectedvoidonResume(){ //TODOAuto-generatedmethodstub super.onResume(); //自定义摇一摇的灵敏度,默认为950,数值越小灵敏度越高。 PgyFeedbackShakeManager.setShakingThreshold(1000); //以对话框的形式弹出 PgyFeedbackShakeManager.register(MainActivity.this); //以Activity的形式打开,这种情况下必须在AndroidManifest.xml配置FeedbackActivity //打开沉浸式,默认为false //FeedbackActivity.setBarImmersive(true); PgyFeedbackShakeManager.register(MainActivity.this,false); } @Override protectedvoidonPause(){ //TODOAuto-generatedmethodstub super.onPause(); PgyFeedbackShakeManager.unregister(); } }
游戏还需要在 GLSurfaceView.Renderer 这个类的 public void onDrawFrame(final GL10 gl) 的方法中添加以下代码
publicvoidonDrawFrame(GL10gl){ PgyFeedbackShakeManager.setGLSurface(true); GLSurfaceUtils.getInstance().takeScreenShot(gl); }
通过点击按钮的方式弹出反馈界面:
//以对话框的形式弹出 PgyFeedback.getInstance().show(MainActivity.this); //以Activity的形式打开,这种情况下必须在AndroidManifest.xml配置FeedbackActivity //打开沉浸式,默认为false //FeedbackActivity.setBarImmersive(true); PgyFeedback.getInstance().showActiivty(MainActivity.this);
自定义反馈界面对话框title
PgyerDialog.setDialogTitleBackgroundColor("#ff0000"); PgyerDialog.setDialogTitleTextColor("#ffffff");
自定义反馈界面Activity
//设置顶部导航栏和底部bar的颜色 FeedbackActivity.setBarBackgroundColor("#ff0000"); //设置顶部按钮和底部按钮按下时的反馈色 FeedbackActivity.setBarButtonPressedColor("#ff0000"); //设置颜色选择器的背景色 FeedbackActivity.setColorPickerBackgroundColor("#ff0000");
自定义反馈信息(不限制增加的数量)
PgyFeedback.getInstance().setMoreParam("tao","value");
将在用户反馈的详情界面看到自定义的数据,如下图:
检查更新
默认对话框的版本更新检查
PgyUpdateManager.register(this);
带回调的版本更新检查
PgyUpdateManager.register(MainActivity.this, newUpdateManagerListener(){ @Override publicvoidonUpdateAvailable(finalStringresult){ //将新版本信息封装到AppBean中 finalAppBeanappBean=getAppBeanFromString(result); newAlertDialog.Builder(MainActivity.this) .setTitle("更新") .setMessage("") .setNegativeButton( "确定", newDialogInterface.OnClickListener(){ @Override publicvoidonClick( DialogInterfacedialog, intwhich){ startDownloadTask( MainActivity.this, appBean.getDownloadURL()); } }).show(); } @Override publicvoidonNoUpdateAvailable(){ } });
解除注册可以调用一下方法:
PgyUpdateManager.unregister();
result的格式为:
混淆
-libraryjarslibs/pgyer_sdk_x.x.jar -dontwarncom.pgyersdk.** -keepclasscom.pgyersdk.**{*;}
传的crash是那些?
Java运行时没有被Try Catched住从而导致JVM停止运行的异常。
什么是Java的还原符号文件?
在使用Progurad工具进行代码混淆时会可以生成的mapping文件。
为什么要上传Java还原符号文件?
产品发布的安装包一般是经过混淆处理的,这样就会导致上报的异常堆栈中的类名和方法名是一种不可读的方式(例如a.b()),我们需要通过Java还原符号表还原回真实的可读的类名和方法名(例如:MyClass.myMehtod())。
kill -9、exit等会被当成Crash上报吗?
不会。
try catch的异常会被当成Crash上报吗?
不会。
App无响应异常(ANR)能否捕获?
不能。
弹出反馈页面时截图为什么没有显示?
请确认在AndroidManifest.xml文件是否添加了android.permission.WRITE_EXTERNAL_STORAGE权限。
反馈页面截图怎么显示的不是当前的Activity界面?
当应用中使用了TabActivity、GroupActivity等包含多个Activity的集合类时,不要在其OnResume()添加PgyFeedbackShakeManager.register(MainActivity.this, Constants.APPID);在其中的子Activity的OnResume()添加即可。
游戏反馈上传的截图为什么是黑色的?
请在onDrawFrame方法中添加:
PgyFeedbackShakeManager.setGLSurface(true); GLSurfaceUtils.getInstance().takeScreenShot(gl);
如何自定义更新提示对话框?
PgyUpdateManager.register(MainActivity.this, Constants.APPID,new UpdateManagerListener() { @Override public void onUpdateAvailable(String result) { // 弹出自定义对话框 } });
怎么样测试app的更新功能已经正常工作?
app集成sdk后打包上传到蒲公英,然后手机扫二维码安装,当同一个app有新的版本再次上传到蒲公英时,手机上打开以前安装的这个app就会提示有新版本更新。
备注:集成sdk后,修改AndroidManifest.xml的android:versionCode值小于上传到蒲公英上的最新版本的android:versionCode值,就可以立即测试更新功能。
为什么我下载了历史版本,打开应用不会提示更新?
1.有可能你的历史版本没有集成sdk的更新功能。
2.你没有修改versioncode,仅仅依靠自增的buildno来控制版本,这样你是没有办法立马检测到新版本的,因为sdk并无法知道你下载的apk对应的buildno,所以本地只能保存最新的buildno,当你有新的版本再次上传时,sdk就可以根据buildno来对比检测到新版本。
自定义更新安装apk时提示“解析包出错”
public void onUpdateAvailable(final String result) { // 调用sdk的默认下载,apk下载地址为result字符串中downloadURL对应的值 String downloadUrl = "apk下载地址"; startDownloadTask(MainActivity.this,downloadUrl); }
请检查apk下载地址是否正确,这里不是apk的单页短链接而是result里面的downloadURL对应的值。