当前位置:首页 » 安卓系统 » android用户行为

android用户行为

发布时间: 2023-01-18 00:43:06

A. 如何查看android软件的行为

引言

在一个家庭中,老、幼两类群体的安全是家庭成员比较担心的,老人外出购物走丢,初中生上课期间去网吧等事件频繁发生。针对此类安全问题,本文基于Android设计出位置实时监控系统。由于在Android系统手机上开发,可提高便捷性和普及程度,降低成本。

1 系统总体设计

本系统在整体上可以分成两大部分,即被监控端和监控端。被监控端和监控端都是在基于Android操作系统的智能手机上开发实现。该系统内数据传输可采用WiFi、GPRS或者3G网络等通信模式,定位采用的GPS卫星定位的方式。然后利用位置分析数据库进行位置数据分析,在手机上载入电子地图,直观地显示被监控端的位置(若出现在非正常区域则进行提醒监控端)。系统总体的结构图如图1所示。

3.3 程序实现

一是接收发送过来的经纬度信息。本设计为直观显示经纬度信息,在加载地图的同时,显示在“短信内容:”部分。其接收功能实现代码如下:

/**
* 监听收到的短信
*/
private final class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
ContentResolver resolver = getContentResolver();
//查到发出的短信
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = resolver.query(uri, new String[] { "address", "body" }, null, null, "_id desc limit 1");
if (cursor.moveToNext()) {
String address = cursor.getString(0);
if (address.equals("此处为被监控对象的手机号码")) {
String body = cursor.getString(1);
smsContent.setText(body);
SearchButtonProcess(body);
}
}
}

二是实现电子地图上的位置显示。仅仅有经纬度信息,监控者无法直观地了解被监控对象的方位。所以在监控端软件上,加载网络地图实现被监控对象的实时监控,运行结果如图8所示。其实现代码如下:

/**
* 对收到的地点发起搜索并显示在地图上
*
* @param v
*/
private void SearchButtonProcess(String smsContent) {
try {
// 逗号分隔过滤得到经纬度字符串
String[] point = smsContent.split(",");
// 获取到的字符串需要转化成long,然后long值需要乘1e6后转化为int
String latitudeStr = point[0];
String longitudeStr = point[1];
GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(latitudeStr)*1e6),
(int)(Float.valueOf(longitudeStr)*1e6));
// 反Geo搜索
mSearch.reverseGeocode(ptCenter);
} catch (Throwable e) {
Toast.makeText(MainActivity.this, "SearchButtonProcess Error", Toast.LENGTH_LONG).show();
}

4 系统测试结果

如果被监控端和监控端都采用Android手机平台,可以充分利用Android提供的丰富的接口,使系统具有更好的扩展性和实用性。该系统进一步改进还可以实现拍照、截图、标注和查看轨迹等功能。

5 结束语

该系统结构简单、功能明确,软件界面方便美观,设计完成后该系统在自己家庭中进行试用。经过实际生活中的运用证明,该系统可对家中的老人或者孩子进行位置的实时监控,并根据其位置信息家庭成员可以判断是否正常,及时打电话确保安全。此外在本系统的设计基础上,添加LED的显示模块也可以应用到城市公交当中去,为乘客向导系统(PIS,Passenger Information System)的建立提供了一些方法和思路。还可以通过司机的Android操作系统手机,实现远程运输车辆的全程监控,极大地降低成本。

B. Android 12 兼容之行为变更

Android 12 平台包含一些行为变更,这些变更可能会影响您的应用。以下行为变更将影响在 Android 12 上运行的 所有应用 ,无论采用哪种 targetSdkVersion 都不例外。您应该测试您的应用,然后根据需要进行修改,以适当地支持这些变更。

此外,请务必查看 仅影响以 Android 12 为目标平台的应用的行为变更 列表。

在搭载 Android 12 及更高版本的设备上, 滚动事件 的视觉行为发生了变化。

在 Android 11 及更低版本中,滚动事件会使视觉元素发光。在 Android 12 及更高版本中,发生拖动事件时,视觉元素会拉伸和反弹;发生快速滑动事件时,它们会快速滑动和反弹。

如需了解详情,请参阅 动画演示滚动手势 指南。

如果您之前在 Android 11 或更低版本中实现了自定义启动画面,则需要将您的应用迁移到 SplashScreen API,以确保它从 Android 12 开始正确显示。如果不迁移您的应用,则可能会导致应用启动体验变差或出乎预期。

如需了解相关说明,请参阅 将现有的启动画面实现迁移到 Android 12 。

此外,从 Android 12 开始,在所有应用的 冷启动 和 温启动 期间,系统始终会应用新的 Android 系统默认启动画面 。 默认情况下,此系统默认启动画面由应用的启动器图标元素和主题的 windowBackground (如果是单色)构成。

如需了解详情,请参阅 启动画面开发者指南 。

从 Android 12(API 级别 31)开始,仅当您的应用获准处理某个通用网络 intent 中包含的特定网域时,该网络 intent 才会解析为应用中的 activity。如果您的应用未获准处理相应的网域,则该网络 intent 会解析为用户的默认浏览器应用。

应用可通过执行以下某项操作来获准处理相应的网域:

如果您的应用调用网络 intent,不妨考虑添加一个提示或对话框,要求用户确认操作。

Android 12 整合了现有行为,让用户可以 在沉浸模式下更轻松地执行手势导航命令 。此外,Android 12 还为 粘性沉浸模式提供了向后兼容性行为 。

Android 设备有许多不同的外形规格,如大屏设备、平板电脑和可折叠设备。为了针对每种设备适当地呈现内容,您的应用需要确定屏幕或显示屏尺寸。随着时间的推移,Android 提供了不同的 API 来检索这些信息。在 Android 11 中,我们引入了 WindowMetrics API 并废弃了以下方法:

在 Android 12 中,我们继续建议使用 WindowMetrics ,并且正在逐步废弃以下方法:

为了缓解应用使用 Display API 检索应用边界的行为,Android 12 限制了 API 为不完全可调整大小的应用返回的值。这可能会对将此信息与 MediaProjection 一起使用的应用产生影响。

应用应使用 WindowMetrics API 查询其窗口的边界,并使用 Configuration.densityDpi 查询当前的密度。

为了与较低的 Android 版本实现更广泛的兼容性,您可以使用 Jetpack WindowManager 库,它包含一个 WindowMetrics 类,该类支持 Android 4.0(API 级别 14)及更高版本。

首先,确保应用的 activity 完全可调整大小 。

activity 应依赖于来自 activity 上下文的 WindowMetrics 来执行任何与界面相关的工作,尤其是 WindowManager.getCurrentWindowMetrics() 或 Jetpack 的 WindowMetricsCalculator.computeCurrentWindowMetrics() 。

如果您的应用创建了 MediaProjection ,则必须正确地调整边界的大小,因为投影会捕获运行投影仪应用的显示分区。

如果应用完全可调整大小,则 activity 上下文会返回正确的边界,如下所示:

如果应用并非完全可调整大小,则它必须从 WindowContext 实例进行查询,并使用 WindowManager.getMaximumWindowMetrics() 或 Jetpack 方法 WindowMetricsCalculator.computeMaximumWindowMetrics() 检索 activity 边界的 WindowMetrics 。

注意 :任何使用 MediaProjection 的库也应遵循这些建议,并查询相应的 WindowMetrics 。

Android 12 将多窗口模式作为标准行为。

在大屏设备 (sw >= 600dp) 中,所有应用都将在多窗口模式下运行,无论应用配置为何。如果 resizeableActivity="false" ,应用会在必要时进入兼容模式,以适应显示屏尺寸。

在小屏设备 (sw < 600dp) 中,系统会检查 activity 的 minWidth 和 minHeight ,来确定 activity 能否在多窗口模式下运行。如果 resizeableActivity="false" ,则无论最小宽度和高度如何,应用都无法在多窗口模式下运行。

如需了解详情,请参阅 多窗口模式支持 。

相机应用通常假定设备的屏幕方向和相机预览的宽高比呈固定关系。但是,大屏设备类型(例如可折叠设备)和显示模式(例如多窗口和多屏幕)挑战着这一假设。

在 Android 12 上,请求特定屏幕方向且不可调整大小 ( resizeableActivity="false" ) 的相机应用会自动进入边衬区人像模式,从而确保相机预览的屏幕方向和宽高比正确。在可折叠设备和其他具有相机硬件抽象层 ( HAL ) 的设备上,会对相机输出应用额外的旋转以补偿相机传感器方向,并会剪裁相机输出以匹配应用相机预览的宽高比。无论设备屏幕方向如何以及设备是处于折叠状态还是展开状态,剪裁和额外的旋转可确保应用正确呈现相机预览。

除了 一些例外情况 之外,为了为短时间运行的 前台服务 提供流畅体验,搭载 Android 12 或更高版本的设备可以将前台服务通知的显示延迟 10 秒。此更改使某些短期任务可在显示通知之前完成。

Android 11(API 级别 30)引入了 受限存储分区 作为应用待机模式存储分区。从 Android 12 开始,此存储分区默认处于活跃状态。在所有存储分区中,受限存储分区的优先级最低(限制最高)。存储分区按优先级从高到低的顺序排列如下:

除了使用模式之外,系统还会考虑应用的行为,以决定是否要将您的应用放在受限存储分区中。

如果您的应用更负责地使用系统资源,就不太可能被放在受限存储分区中。此外,如果用户直接与您的应用互动,系统会将其放在一个限制较少的存储分区中。

如需检查系统是否已将您的应用放在受限存储分区中,请调用 getAppStandbyBucket() 。如果此方法的返回值为 STANDBY_BUCKET_RESTRICTED ,则您的应用在受限存储分区中。

如需测试您的应用在系统将其放在受限存储分区中时的行为,您可以手动将您的应用移至该存储分区。为此,请在终端窗口中运行以下命令:

在搭载 Android 12 或更高版本的受支持设备上,用户可以通过按一个切换开关选项,为设备上的所有应用启用和停用摄像头和麦克风使用权限。用户可以从 快捷设置 访问可切换的选项(如图 1 所示),也可以从系统设置中的“隐私设置”屏幕访问。

详细了解这些 切换开关 以及如何检查您的应用是否遵循了关于 CAMERA 和 RECORD_AUDIO 权限的最佳实践。

在搭载 Android 12 或更高版本的设备上,当应用使用麦克风或相机时,图标会出现在状态栏中。

详细了解这些 指标 以及如何检查您的应用是否遵循了关于 CAMERA 和 RECORD_AUDIO 权限的最佳实践。

[图片上传中...(image-bd519-1643780883994-1)]

<figcaption style="box-sizing: inherit; font-size: 14px; margin-top: -4px;"> 图 1. “快捷设置”中的麦克风和摄像头切换开关。</figcaption>

[图片上传中...(image-f49bfd-1643780883994-0)]

<figcaption style="box-sizing: inherit; font-size: 14px; margin-top: -4px;"> 图 2. 麦克风和摄像头指示标志,显示了最近的数据访问。</figcaption>

在搭载 Android 12 或更高版本的设备上,根据应用对其他应用的 软件包可见性 ,以 Android 11(API 级别 30)或更高版本为目标平台且调用以下某种方法的应用会收到一组过滤后的结果:

Android 12 移除了之前弃用的加密算法的许多 BouncyCastle 实现,包括所有 AES 算法。系统改用这些算法的 Conscrypt 实现。

如果符合以下任何条件,则此变更会影响您的应用:

在 Android 12 及更高版本中,当某个应用首次调用 getPrimaryClip() 以 从另一个应用访问剪辑数据 时,会弹出一个消息框消息,通知用户对剪贴板的访问。

消息框消息内的文本包含以下格式: <var translate="no" style="box-sizing: inherit; color: var(--devsite-var-color); -webkit-font-smoothing: auto; font-weight: 500;">APP</var> pasted from your clipboard.

注意 :您的应用可能会调用 getPrimaryClipDescription() 以接收有关 剪贴板上当前数据的信息 。当您的应用调用此方法时,系统不会显示消息框消息。

在 Android 12 及更高版本中, getPrimaryClipDescription() 可以检测到以下详细信息:

为了加强用户与应用和系统互动时的控制,从 Android 12 开始,弃用了 ACTION_CLOSE_SYSTEM_DIALOGS intent 操作。除了 一些特殊情况 之外,当应用尝试 调用包含此操作的 intent 时,系统会基于应用的目标 SDK 版本执行以下操作之一:

在以下情况下,应用仍然可以在 Android 12 或更高版本上关闭系统对话框:

为了维持系统安全并保持良好的用户体验,Android 12 会阻止应用使用 触摸事件 ,使用触摸事件时叠加层会以不安全的方式遮掩应用。 换言之,系统会屏蔽穿透某些窗口的触摸操作,但 有一些例外情况 。

此变更会影响选择让触摸操作穿透其窗口的应用,例如使用 FLAG_NOT_TOUCHABLE 标志。包括但不限于以下示例:

在以下情况下,允许执行“穿透”触摸操作:

如果系统屏蔽触摸操作, Logcat 会记录以下消息:

在搭载 Android 12 或更高版本的设备上,不受信任的触摸功能默认被屏蔽。如需允许不受信任的触摸操作,请在终端窗口中运行以下 ADB 命令 :

如需将行为还原为默认设置(不受信任的触摸操作被屏蔽),请运行以下命令:

Android 12 更改了在按下“返回”按钮时系统对为其任务根的启动器 activity 的默认处理方式。在以前的版本中,系统会在按下“返回”按钮时完成这些 activity。在 Android 12 中,现在系统会将 activity 及其任务移到后台,而不是完成 activity。当使用主屏幕按钮或手势从应用中导航出应用时,新行为与当前行为一致。

注意 :系统仅会将新行为应用于为其任务根的启动器 activity,即使用 ACTION_MAIN 和 CATEGORY_LAUNCHER 声明 intent 过滤器 的 activity。对于其他 activity,在按下“返回”按钮时,系统会像以前一样完成 activity。

对于大多数应用而言,此变更意味着使用“返回”按钮退出应用的用户可以更快地从 温状态 恢复应用,而不必从 冷状态 完全重启应用。

建议您针对此变更测试您的应用。如果您的应用目前替换 onBackPressed() 来处理返回导航并完成 Activity ,请更新您的实现来调用 super.onBackPressed() 而不是完成 Activity。调用 super.onBackPressed() 可在适当时将 activity 及其任务移至后台,并可为不同应用中的用户提供更一致的导航体验。

另请注意,通常,我们建议您使用 AndroidX Activity API 提供自定义返回导航 ,而不是替换 onBackPressed() 。如果没有组件拦截系统按下“返回”按钮,AndroidX Activity API 会自动遵循适当的系统行为。

在 Android 12 中,无论显示屏是否支持无缝过渡到新的刷新率,都会发生使用 setFrameRate() 实现的刷新率变化;无缝过渡是指没有任何视觉中断,比如一两秒钟的黑屏。以前,如果显示屏不支持无缝过渡,它在调用 setFrameRate() 后通常会继续使用同一刷新率。您可以调用 getAlternativeRefreshRates() 来提前确定向新刷新率的过渡是否有可能是无缝过渡。通常,会在刷新率切换完成后调用回调 onDisplayChanged() ,但对于某些外接显示屏,会在非无缝过渡期间调用该回调。

以下示例说明了您可以如何实现此行为:

Android 12 中添加了以下 API:

如需创建 Passpoint 建议,应用必须使用 PasspointConfiguration 、 Credential 和 HomeSp 类。这些类描述了 Wi-Fi Alliance Passpoint 规范 中定义的 Passpoint 配置文件。

如需了解详情,请参阅 适用于互联网连接的 Wi-Fi 建议 API 。

Android 12 包含更新后的受限制非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。在限制使用非 SDK 接口之前,我们会尽可能确保有可用的公开替代方案。

如果您的应用并非以 Android 12 为目标平台,其中一些变更可能不会立即对您产生影响。然而,虽然您目前仍可以使用一些非 SDK 接口( 具体取决于应用的目标 API 级别 ),但只要您使用任何非 SDK 方法或字段,终归存在导致应用出问题的显着风险。

如果您不确定自己的应用是否使用了非 SDK 接口,则可以 测试您的应用 来进行确认。如果您的应用依赖于非 SDK 接口,您应该开始计划迁移到 SDK 替代方案。然而,我们知道某些应用具有使用非 SDK 接口的有效用例。如果您无法为应用中的某项功能找到使用非 SDK 接口的替代方案,应 请求新的公共 API 。

如需详细了解此 Android 版本中的变更,请参阅 Android 12 中有关限制非 SDK 接口的更新 。如需全面了解有关非 SDK 接口的详细信息,请参阅 对非 SDK 接口的限制 。

C. Android端的用户行为统计和日志打捞方案

        提到移动客户端的优化,大家首先想到的可能就是页面的流畅度,也就是CPU和GPU的渲染问题,以此来提升用户的体验,然而对于CPU和GPU渲染的优化又是APP优化的两把尖刀,让一个app提升用户量和体验度有较高的推动力。然而让我们无法预估的就是用户的实际操作,也就是已经发出去的版本,我们很难知道用户喜欢什么功能和他们想要什么功能以及他们习惯于什么样的操作姿势,包括用户安装、卸载不用的情况,并且对潜在的线上崩溃问题,作为一位开发者我们就很想知道错误出现的精确位置以及错误信息,这些对一个APP的成长来说将是一个关键的导向作用,其实这也算是APP的一个比较重要的优化方案。

           对于以上出现的问题,开发者更关心APP的Crash问题,而对于产品来说,他们更关心用户的喜好、行为和需求,以便于产品设计出更好的需求解决方案,目前市场上也出现了专门的问题解决方案,比如友盟统计、bugly统计、小米统计等,对于一个小型方案我们可以采用第三方的统计方案,但对于一个日活百万乃至千万的APP来说用第三方的统计方案就会受限很多,于是拥有自己的一套统计方案就显的刻不容缓了,掌握市场的方向,我们就掌握了主动权,那么我们怎样去设计一套准确优良的统计方案。

1.1 传统的pc端统计

以老牌的pc上的web页面统计一般有PV.UV,和IP之分,对于crash问题,本身web页面就存在远程的服务器端,日志将会保存在服务器的目录,所以一般web项目开发者无需考虑收集Log的case,那么我们更care的就是上面说的行为统计,下面说说这三种统计区别。  

2. 2、IP、PV和UV分别是什么意思?

IP,实际上也就是指独立IP,是独立IP数的意思。00:00—24:00时间内相同IP地址只记录一次。即使你有多台电PC,但是如果IP地址是一样的,那么也只能算是一个IP的访问,IP数据依然为1。当然多台pc的ip一般都不一样,除非你插上同一个网络端口然后换零一台连接,都是一样,同时连接多台,每台pc的IP就是不一样的。

PV, 指访问量,它的英文是PageView,具体是指网站的是页面总浏览量或者点击量,页面被刷新一次就计算一次。如果网站被刷新了10次,那么流量统计工具显示的PV就是10 。

UV,它是独立访客的意思,英文为Unique Visitor。具体指访问您网站的一个客户端(移动设备或者是电PC)为一个访客。00:00-24:00内相同的客户端(mac地址区分)只被计算一次。

3 . 3 IP、PV和UV之间的关系是什么?

1.3.1.IP和PV之间的关系

PV是和IP的数量是成正比的,因为页面被刷新一次那么PV就会被记录一次,所以IP越多,说明网站的PV数据也就随之增多。但是需要注意的是PV并不是网站的页面的访问者数量,而是网站被访问的页面数量。因为一个访问者可以多次刷新页面,增加PV数量。

1.3.2 .IP和UV之间的关系:

在记录网站流量统计数据时,运维有时候发现这样一种情况:有时候网站的IP数据大于UV数据,有时候UV的数据也会大于IP数据。为什么会出现这种现象呢?我们可以用一个例子来说明。比如,用同一个IP去访问我们的某个网站,但是一个是用的台式的电脑,一个是用的笔记本,那么网站流量统计工具显示的数据就会是2个UV,1个IP。这时UV的数据就会大于IP的数据。但是,再比如,只是用一个台式电脑访问我们的网站,但是一会拨一个号换一个IP,那么这时候网站流量统计工具显示的数据的UV就为1,但是IP的数据就会高于UV的数据。因此,IP和UV之间的数据并不一定存在比例关系,两者之间的数据也不是此消彼长的关系。

1.3.3.IP和PV之间的关系:

那么IP和PV的关系如何呢?如果一个IP刷新了网站100次,网站的PV就为100,所以从这点看二者之间没有多大关系。但是,我们可以通过IP和PV之间的数据差异,来更加深入的理解网站的流量数据。如果IP和PV的数据悬殊很大,比如,我们在查看网站流量数据时发现网站的PV是1000,IP为100,那么说明这个站点平均一个IP访问了网站内容10次,说明网站内容还是比较受欢迎的,所以访客才愿意在网站中停留那么久的时间,并浏览了那么多的网站页面内容。但是如果IP和PV的数据很接近,比如,网站的IP为100,PV为110,说明一个IP也就访问了网站内容大约1次,就说明网站内容的可读性太差,客户点击进去之后就离开了,没有有过多的停留。如果网站流量统计这样的数据过多的话,站长就需要对网站内容进行深入思考了,以便更好的提高网站的流量。

1.4 我们能从这边得到什么

鉴于已经很成熟的统计方案,我们在移动设备上(这里只说android)怎样实现一个完美的用户数据和行为统计,崩溃日志的套装方案呢。

那么我们的一个App,我们能做的那些方面呢

2.1 .1 用户数据(日活)

首先我们的可以加入ip,PV和UV统计模式,这样我们可以成功的get到app的日活,以及整体使用情况, 

比如App启动了多少次,访问了多少h5页面,有多少个ip(设备)访问过,但是我们无法得native页面的信息(也就是Activity)服务端是是无法获取的,除非我们本地的页面有加载服务端数据的接口的功能,这种情况下服务是可以监控到本页面的数据流量的,但是在断网情况下,服务端是无法及时获取日活数据的,那么怎么解决呢,这里先不说,先看下个要解决的问题。

2.1.2 用户行为

获取到了APP整体流量后,怎么能知道某个功能受欢迎,或者某个本地页面经常被用户使用呢,则具体行为统计是app必须的, 目前一般由客户端和服务器端协商好一套自定义事件字典(也就是所谓的统计id对照表),当用户使用某个功能时,我们将对应的功能id发送到后台。这样服务端就有统计用户行为的能力了,那么这种只是一种初次尝试的想法,那么断网,或者功能多的情况子下,我们有如何采集用户行为呢

2.1.3 Log日志

那么对于线上的app版本,又是怎样收集carsh日志呢。一般我们在app崩溃的时候发送一条请求到服务端,是可以实现的,但没必要做,一般是将日志保存到本地,在某个时间或者case触发上报行为,

三 综合方式。

一般统计策略不会采用单一的方式进行上报,多采用组合的形式实现,服务器和客户端,有网和没网,实时和不定时。主动和被动的策略。

1 服务端

客户端请求接口是 统一包含特定的请求头,服务端的每个接口中可以去采集这些请求头 记录访问量 包括ip,PV,UV , 这样可以去捕获一定的用户数据。

服户端也可以采用推送的形式,让客户端去发送特定的采集好信息上报给服务器。

2 客户端

统计一般大多体现在客户端,我们可以将一个整体的app分解成多个模块,每个模块有多个功能,功能又分为用户主动和被动接受之分,给每个域分配一定的ID,那么在用户使用某个功能时 我们动态记录这个ID(比如登陆和注册一般属于用户中心(001),登陆和注册输入两种功能,分别给03,04标记,登陆属于用户主动 那么可以给 01,注册被动跳转给02), 最后写入到本地保存,那么用户打开用户中心登陆产生的的数据信息就0010201 ,这样服务器能知道,我们只要在某个时间点将文本数据上传即可,即使没网络情况下我们也不怕,等设备有网的情况下 我们偷偷上报即可,那么我们也可以在用户登陆的时候时侯同时就上传这些数据,这个策略视具体功而定。 

一般一个APP统计有模块域 ,功能域,事件域,由大到小分配而来,也有按页面区分的,具体看实际的需求场景而定

对于我们的app crash 我们可以继承android自带的全局异常类(UncaughtExceptionHandler),来进行自我捕获异常,和用户行为一起上报。

也可以单独加个意见反馈功能,采集用户的吐槽和建议。

说了上面一大堆策略问题,对于开发而言很可能觉得很无聊,那么至于统计其实没什么技术含量(用户设备的唯一标识符除外),无非就是采集数据写到文件中,请求发送数据,最重要的还是一种策略的定义。

主流的多采用 时间戳,内存大小(日志积累到多大字节),次数(总计积累到多十条)等,

对于好的统计,我们可以检测网络,检测home建来触发我们的上报数据接口,也可以采用注册静态广播,用alarm 闹钟定时上报数据,然后这些技术也就是被大家玩透的功能而已,没必要再这里给大家补脑,但是注意的是

统计设备唯一标识符的确定, 这个以后再去分析.

统计上报接口采用分布式,不然所有数据都请求同一个接口,那么日活大的情况下,服务器挂了 不仅无法收到数据,反而影响客户端其他正常的功能

D. android 应用如何检测用户截屏行为

  • 下一个手机专家,检测

E. 用户行为特征

用户行为特征

用户行为特征,对于运营来说用户的行为是需要关注的一个点,很多时候用户的行为决定了一个网站甚至是一个软件能否继续运运营下去,所以通常都是要对于用户行为特征进行一个分析,下面一起看看相关内容。

用户行为特征1

用户行为是用户在产品上产生的行为,实际表现为相关的用户数据。产品经理运用不同分析方法对不同数据进行分析,进而为产品迭代和发展提供方向。

一、用户行为是什么?

1、用户行为

用户行为是用户在产品上产生的行为。我们以小明的case具象化用户行为表现:

因为小明关注作者的信息被记录了下来,当该作者有发布信息时,则会通知所有关注他的人,而小明也是其中之一。

小明关注作者的信息记录,则是行为数据。小明的行为数据会有 启动app、浏览、查看图集、播放视频、点赞、关注作者……

2、用户行为数据

用户行为数据是从一次次的行为中而来的,行为数据是通过埋点进行监控(相见埋点介绍)、后续一篇文章将介绍如何(设计埋点)。通常是数据同学完成埋点设计,由开发完成监控程序 或 调用SDK。针对小明的行为(假设以下均已埋点):

3、用户行为分析

是指对用户行为数据进行数据分析、研究。

4、用户行为分析的作用

(1)通过用户行为分析,可以还原用户使用的真实过程。

一个xxx的人在什么样的环境中(由于什么样的行为)在时间点做了xxx事情做了什么事情结果如何

(2)“了解用户,还原用户”是“以用户中心”的第一步。只有详细、清楚的了解用户的行为习惯、真实的使用路径、进而找出 产品使用、渠道推广等过程中存在的问题,提高用户/页面/业务过程中的转化率。

(3)用户行为分析(case需要补充)可以用于

A、拉新:渠道分析、SEM分析、用户质量分析、

B、转化:新增用户注册转化过程、产品使用过程转化(搜索、推荐等)、push推送调起过程、站外拉起过程

C、促活:用户停留时长、用户行为分布、

D、留存:用户留存分析

E、商业化:根据用户历史行为展示广告

二、如何进行用户行为分析?

1、行为事件分析

行为事件分析方法主要用于 深度研究某行为事件,以及对产品的影响以及影响程度。

针对某一具体行为,全面的描述、对比,针对其异常表象 深度下钻分析各维度、确认导致该行为数据表现的原因。如快手的播放量徒增:同期对比分析,确认历史上是否有发生过,对比 去年/上个季度/上月/上周/昨日的 数据的相对表现。多事件对比分析。对比浏览量、点赞、评论、分享事件的数据是否存在徒增。通过对比多个事件,确认徒增现象发生的范围。维度下钻:由于播放量取决于3个部门用户在快手消费视频,被监控程序上报。

所以在三个方面分析:

监控程序是否异常?在快手哪个页面的播放量增加呢?是发现、关注、还是同城?-> 对应页面做了哪些调整?是否增加了引流;哪一部分用户群的播放量增加了?交叉分析 用户自然属性(平台、性别、年龄、地域、教育学历、机型、消费能力)、行为属性(新增、回流、常活跃用户;直播用户、短视频用户…、)、视频属性(视频类型、作者类型…、)

2、留存分析

留存是衡量用户是否再次使用产品的指标,也是每一个app赖以生存的指标,能够反映任何一款产品健康度,是产品、运营、推荐效果的整体表现。如果一个app从来没有留存用户,那DAU将永远是新增用户,那么产品将无法运行下去,更别说新用户成本付诸东流。

贴合业务属性、精细化留存过程 将对留存数据更有价值和指导意义。通过留存分析,能够剖析用户留在产品的原因,从而优化产品核心功能提升留存。

留存的类型:

用户留存:用户使用app后,经过一段时间仍旧使用。功能留存:用户使用xxx功能后,经过一段时间仍旧使用该功能,且其他功能均有所变化。此时,该功能对用户留存有正向作用。先前有写过 留存分析的文章,这里就不赘述了。

3、漏斗分析

漏斗分析实质是转化分析,是通过衡量每一个转化步骤的转化率,通过转化率的异常数据找出有问题的环节并解决,进而实现优化整个流程的完成率。

在产品初期(处于与市场适配的阶段):通过漏斗分析找到用户触达的瓶颈,帮助用户触达产品核心价值,真实反映MVP与市场匹配程度;在产品中期(处于用户平稳增加的阶段): (1)通过漏斗分析优化渠道,找到目标群体用户; (2)通过漏斗分析优化用户在各模块的体验(基础的登录模块、产品核心价值模块: 如抖音的播放模块、淘宝的购买模块等);在产品后期(处于用户价值产出的阶段): (1)通过漏斗分析可以改善用户生命周期(优化用户体验提高用户生命周期,间接拉长用户群体的价值产出的时间长度,减少高价值用户群体的流失);(2)可以通过漏斗分析优化商业化模块,像商品的购买过程(购物车-提交订单的转化漏斗)、广告的曝光点击等,提高生命周期中单位时间产生的价值。

4、路径分析

路径分析可以将纷杂的app日志按照用户的使用过程,呈现出“明确的”用户现存路径。发现路径问题,进而优化,使用户尽可能短路径体验到产品核心价值。

通过路径分析,可以了解到像小明这样9点左右播放视频的用户:他们是通过push点击而来,这部分用户占比是多少;他们匆匆结束播放,再也没有下一步行为,这部分用户占比又有多少。针对他们利用碎片化时间播放视屏的场景,尤其是突然退出的'场景,是否在下一次打开app时,仍旧打开终端的视频。是否有其他策略可以针对该场景来优化?

此外,路径分析不仅仅可以用于行为路径分析,也可以用于用户群体转化分析。例如:新用户中分别转化为 忠实用户、常活跃用户、潜在流失用户、流失用户的分析。

5、用户分群分析

通过了解用户画像,可以帮助运营理解用户。根据用户画像(基本属性、用户偏好、生活习惯、用户行为等)的标签信息将用户分群。

通过用户分群行为表现对比,可以进一步了解不同群体对产品的反馈,有针对性的优化产品。

发现中 西南地区的低端机型使用app时,奔溃率特别高,开发可以针对该点进行优化、降低奔溃率;可以针对不同的用户群体的行为表现 做 定向投放、push等,从而实现精细化运营。业内的商业化行为分析产品,基本上将用户画像的生成、标签的过程均合并在用户分群的群体定义中,降低了操作流程。

三、用户行为分析的完整链路

以小明为case的用户行为每天数以万/亿计的产生,如何对“这类人群”进行“行为分析”?需要行为分析将明细级别的日志聚合后再以较为可读的形式展示出来。

为了保障埋点可靠、数据上报及时、行为数据分析有效。需要一套完整的用户行为系统,包括从数据埋点设计、埋点开发、数据上报、数据模型开发、行为数据分析。 过程中也需要多方协作完成,如何保障多方协作中高效、便利的完成、产出具有业务价值的数据分析结论。后续将介绍服务于用户行为分析的相关平台介绍。

用户行为特征2

一、什么是用户行为

中国有句古话“天地四方为宇,古往今来为宙”,这句话揭示了空间和时间的概念。我们要想透彻地研究任何事物,常以时间和空间两个维度来考虑。分析用户行为也不例外。

换句话说,用户行为的研究内容可以按照时间和空间维度展开。

从时间的维度来看,按照管理学大师菲利普科特勒的理论,用户的行为轨迹包括:产生需求、信息收集、方案比选、购买决策;购后行为5个阶段。其中购后行为包括使用习惯、使用体验、满意度、忠诚度等。

从空间的维度来看,用户行为的构成要素包括5W2H,例如我们要全面描述用户在购买阶段的行为,就要回答这样的问题,谁(who)?打算在什么时候(when)?什么地方(where)?买什么东西(what)?产生需求的动机是什么(why)?打算买多少(how much)?如何买(how)?同理,在使用阶段也可以从这7个要素来描述。

5阶段和7要素的结合,形成了用户行为分析的研究体系。这个体系细化了用户行为的研究内容,基于这些内容,就有了用户调查问卷的一些基本的问题。

二、为什么分析用户行为(Why)?

之所以分析用户行为,是为了找到用户行为的特征,从而为企业的经营提供支持。

大家想想,用户行为具有哪些特征呢?

Q1: 用户行为是同质化的,还是差异化的?

A1:差异化的,因此用户行为具有差异性

Q2:用户行为是静态不动的,还是动态变化的?

A2:动态变化的,因此用户行为具有流动性

Q3:用户行为是相互隔绝的,还是相互影响的?

A3:相互影响的,因此用户行为具有传播性

差异性、流动性和传播性是用户行为的三个显着特征。那么,这些特征具体是如何表现的,分析这些特征对企业的经营有什么作用?

这里我们只谈差异性,后面的博文中会谈流动性和传播性。

用户行为从时间和空间的维度,分为5阶段7要素。因此用户的差异性,就表现在这5阶段和7要素上。例如,在产生需求阶段,用户的需求动机why不同。同样是买电脑,有的是为了工作、有的为了学习、有的是为了消遣;再比如,在信息收集阶段,用户的信息收集渠道where不同。同样是买房子,有的看网络广告;有的听朋友介绍;有的到现场采点。

这里只举了两个阶段,你能说出在其他阶段用户的差异性表现吗?

意识到用户的差异性,企业的营销工作就不会搞一刀切,就不会拿大炮轰蚊子,而是会进行市场细分和目标市场选择,然后针对目标用户进行精准营销。这种精准营销体现在市场定位、竞争战略选择、品牌形象和营销组合等很多方面。

三、如何分析用户行为(How)?

这里我们只谈差异性,后面的博文中会谈流动性和传播性。

我们前面谈到因为用户行为具有差异性,因此需要进行市场细分和目标市场选择,那么如何进行市场细分和目标市场选择呢?

市场细分的思路是看看从哪个维度切分市场,使所分得的细分市场内部具有的共性,细分市场之间具有个性。从哪个维度切要结合企业所处的行业特点的。例如食品市场,地域差异比较明显,南甜北咸东辣西酸,所以食品市场可按地域分;服装市场,性别差异非常突出,男款少而精;而女款多而靓,所以服装市场可按性别分。此外二八原则,也广泛用于市场细分,即我们可以按重要程度将用户分为大中小三类。重要性可以有很多评价指标,比如规模、综合实力、业内影响力、对企业的贡献率、在同类产品上的总投入等等。

将市场划分成几个细分市场后,企业就面临着目标市场选择的问题。如何选择目标市场呢?这是一个团体决策的过程,在选择目标市场时往往需要企业的管理人员和骨干营销人员坐在一起讨论来确定。讨论共有五步进行

第一步指标的选择需结合企业自身的实际情况。例如,我是大企业,规模经济是我的优势,那市场规模就是我选择的重要指标;我是中小企业,我要更关注竞争的激烈程度,因为竞争太激烈了,我可能无法存活。因此,竞争强度就是我选择的重要指标。

第二和第三步确定优先级和为指标打分的方法可参考小蚊子的《谁说菜鸟不会数据分析》中的权重确定方法

第四步的综合得分是第二步和第三步的结果加权平均得到。

第五步选择目标市场可以企业适应度和市场吸引力为横纵坐标,得出各个细分市场在四个象限中的位置。

六款免费的用户行为分析工具测评

中国移动互联网市场经过几年的高速发展,增速已经明显放缓,人口红利逐渐消失。移动互联网进入了下半场,市场竞争已经从增量用户竞争逐步转化成为存量用户竞争。同时伴随流量红利消失,数据红利时代已经到来,流程驱动性公司正转变为数据驱动的数字公司,竞争从同业蔓延至异业竞争,跟随用户,跨场景地满足用户的需求将会成为数据红利时代最核心的诉求。

如果说数字化转型不可逆,那么对于用户的精细化运营将会是数字化转型的支撑点之一。要实现对用户的精细化运营,必不可少要对用户行为进行分析。比如对网站、APP等渠道的用户行为数据进行采集,对获取到的用户行为数据进行多维度、多角度对比分析,用以指导提升获客效率、优化产品服务和用户体验,以数据驱动业务持续增长。

但目前来看,距离要实现这一目标,还有一定的差距。由于日常工作中,大家的分工不同,仅关注某一个方面的数据显然不够,无法全面了解产品运营情况,更不能提出行之有效的分析建议。

现在的情况是在公司内,业务部门想要看数据,会先提出自己的数据需求,这时候需要找到技术人员或者数据分析师,根据需求写SQL将数据从库里提出来,交给数据分析师进行分析,形成对应报表之后,再发给业务部门查看,完成整个过程没个三五天搞不定,数据分析的时效性大大降低。

企业采用用户行为分析工具,可以让产品、运营、市场、数据等业务部门更方便的分析数据,让技术部门日常面对的零碎需求更少,能把等多精力放在建立数据仓库等核心工作上。

当我们在做产品开发或者产品运营时,通常需要第三方工具去做用户行为分析以提供数据支持。因此免费产品的试用成了大家在前期选择工具的必要方式。为了方便大家对目前市场上的用户分析工具有一个清晰的了解,我们在试用了大量的工具后,分别从数据接入、数据分析、安全与拓展几个方面进行了综合分析。

许多人都在问,市场上有没有免费的用户行为分析工具,答案是有的!不过各家各有特点,国外知名用户行为数据分析工具像Google Analytics(以下简称GA)、Mixpanel,国内有网络统计、易观方舟Argo、友盟、TalkingData免费版(以下简称TD免费版)。

01、数据接入

谈到数据接入,首先需要说明的是几个产品在数据模型上的差别。

GA、网络统计诞生于传统PC互联网时代,都是以传统的页面浏览(PV)和用户会话(Session)为核心。其中GA经过多年演进,增加了一些关于事件分析和自定义属性的内容,但本质上主要还是服务于页面类的产品。网络统计还是依然只支持页面和会话统计。

随着移动互联网时代到来,用户的行为触点变多,以往以页面和会话为中心所能采集到的结构化数据颗粒度不够细,页面和会话模型已经不适用了。因此,基于“用户+事件(User+Event)”模型出现了,在分析的时候可以完全自主的定义需要分析的事件,并从不同的属性维度进行交叉分析。刚推出不久的易观方舟Argo,以及Mixpanel、友盟、TalkingData免费版都采用了 “用户+事件”模型。

在埋点方面,目前根据埋点的工具和方式,可以划分为三种类型:代码埋点,可视化埋点和全埋点,并没有说哪一种方式能够碾压其他几种,因为都各有弊端,具体的各种埋点方法的分类与优缺点我们也做一下对比:

下面我们看一下市面上几家免费的数据分析产品之间在数据接入方面对比。需要注意的是由于GA、Mixpanel都是国外产品,在数据采集的规则适配了iOS、Android的设计规范,但国内开发者常常直接忽视这些设计规范开发产品,而GA、Mixpanel在数据采集上没有针对国内产品的特点进行优化,因此在数据采集的准确性上可能会受到一些影响。

另外,需要提到的一点是Mixpanel和易观方舟Argo的数据采集SDK开放了源代码,一定程度上可以打消企业在数据采集安全方面的顾虑。

02、数据分析

数据分析是用户行为分析工具的核心,除了网络统计以外,其他几款产品都可以满足用户行为数据分析的基本需求,但在功能的丰富程度上不尽相同。具体对比可以看下表。

从分析模型丰富程度上来看,Mixpanle和易观方舟Argo是里面功能最全的,堪称全家桶,唯一遗憾的是目前易观方舟Argo目前尚不支持热图分析。比如最常用的“事件分析”这个功能,不止可以从PV、UV等方面进行分析,还可以根据不同的属性值设定具体的指标按照不同的维度进行对比,功能非常强大。

从数据准确性上来看,GA在算法的严谨性上应该是最好的,但如果用户或者事件量比较大的时候,会采取抽样分析,可能会影响到数据的准确性,Mixpanel的免费版本也会存在类似的问题。易观方舟Argo在这方面表现抢眼,在数据计算上支持秒级实时数据分析、自定义指标、多维多人群指标对比、人群交叉分析、智能分析、数据实时回传、即席数据分析等。

从数据管理、项目管理、权限管理这些常用的管理功能方面来看,几款工具都提供了比较友好的支持。但仅有友盟+提供了手机app,可以随时通过手机查看监测的数据情况,易观方舟Argo支持通过手机浏览器访问查看数据看板。

另外,值得一提的是易观方舟Argo里面的用户运营和触达功能。目前易观方舟Argo可以在完成用户分析与分群后,通过邮件、短信、Push消息等方式对目标用户进行触达,还支持配置UTM追踪参数对广告进行跟踪。

03、安全与拓展性

企业级产品在数据安全性和可拓展性上,需要提前做一些考量,几款产品也各有侧重,具体对比情况如下表所示:

(点击图片可查看清晰大图)

GA免费版 和 Mixpanel 提供的都是SaaS服务,但因为服务器都在国外,在国内使用起来稳定性和刷新速度上可能会有一定的影响;网络统计、友盟统计、TD免费版基本上都是SaaS服务;易观方舟Argo提供安装包,可由企业自己私有部署,如果对数据安全有顾虑,易观方舟Argo是个不错的选择。在服务方面,除了GA和易观方舟Argo可提供社区服务支持以外,其他产品目前还没有完善的用户服务支持。

总结

对比来说,刚推出不久的易观方舟Argo,在数据采集、数据分析能力上,已经可以满足产品数据和用户行为数据分析的需求,而且提供了独家的一站式用户运营和用户触达。与目前其他国内的免费工具产品对比来说,易观方舟Argo在颗粒度细致程度、分析模型全面性、系统性能方面表现优秀。

目的,大多数成长型团队、创业团队的市场及运营预算都相对紧张,每一分投出去的钱恨不得立马知道什么时候能转化回来,如果自己搭建一套完整的数据分析平台要花费的功夫肯定不少。相信更多性能全面的用户分析和运营分析工具的免费开放,能避免企业在市场运营方面走弯路;也能解放团队更专注的在业务上,通过用户行为分析提升营销效率、优化迭代产品、留住更多用户,真正用数据指导和驱动业务。

最后,这次选型过程中,在易观方舟Argo社区交流感受较好,现在市面上能见到的免费工具产品不少,但真正形成自己技术服务社区的不多。相信未来他们能把这个社区做的更好,就像当年小米运营MIUI做社区一样,能给广大的技术宅和数据爱好者提供一个炫技、PK、互助的圈子。

F. android 的action bar有什么作用

下面是一个actionbar的使用截图,来源于android学习手册,360手机助手中可下载,里面有108个例子,源码还有文档


Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观。你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中。


Action bar的主要目的是:


1.提供一个用于识别应用程序的标示和用户的位置的专用空间。

这个空间的左边是应用的图标或logo,以及Activity的标题。但是,如果是像当前选择的标签这样的标识当前View对象的导航标签,你可以选择删除Activity的标题。

2.在不同的应用程序之间提供一致的导航和视觉体验。

Action bar提供了用于Fragment间切换的内置导航标签。它还提供了一个用于替换导航模式或优化当前视觉效果(如按照不同条件排序的列表)的下拉列表。

3.突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。

对于关键的用户操作,你能够通过把选项菜单项作为操作项直接放到操作栏中,从而提供快捷的访问。操作项目还能提供一个操作窗口,这个窗口给更直接的操作行为提供一个嵌入的窗口部件。没有改进成操作项的菜单项在溢出菜单中还是有效的,用户既可以使用设备上的菜单按钮(设备上有按钮的时候),也可以使用操作栏中的溢出菜单按钮(当设备上不包含菜单按钮时)来显示这些操作项目。

上面的总结一下:Action bar就是替换3.0以前的tittle bar和menu。


图1. Honeycomb Gallery应用中的操作栏,从左边开始,依次是logo、导航选项标签和操作项(在右边插入的一个悬浮菜单按钮)。

Note:If you're looking for information about the contextual action bar for displaying contextual action items, see theMenuguide.

Action Bar Design For design guidelines, read Android Design'sAction Barguide.


添加Action Bar

从Android3.0(API级别 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity(或者是这些Activity的子类)中,当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一。如:

[html] view plain print?

<manifest...>

<uses-sdkandroid:minSdkVersion="4"

android:targetSdkVersion="11"/>

...

</manifest>

<manifest ... >
<uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" />
...
</manifest>


在这个例子中,应用程序要求最小的API版本级别是4(Android 1.6),但是它还要求了目标API版本级别是11(Android 3.0)。这样,当应用程序运行在Android3.0或更高的版本上时,系统就会给每个Activity应用holographic 主题,这样,每个Activity就会包含Action bar。

如果你想使用ActionBar API来进行添加导航模式和修改操作栏样式的操作,你应该把minSdkVersion属性设置为“11”或更大的值。有一些方法可以使你的应用支持更旧的Android版本,同时在API等级为11或更高的API等级的机器的使你的应用支持一些Action bar apis。为了保持后向兼容,请参考边框内的内容(边框内容如下)。


Remaining backward-compatible


If you want to provide an action bar in your applicationandremain compatible with versions of Android older than 3.0, you need to create the action bar in your activity's layout (because theActionBarclass is not available on older versions).

To help you, theAction Bar Compatibilitysample app provides an API layer and action bar layout that allows your app to use some of theActionBarAPIs and also support older versions of Android by replacing the traditional title bar with a custom action bar layout.

删除Action bar

如果你不想要Action bar,把Activity的主题设置为Theme.Holo.NoActionBar就可以了,如:

[html] view plain print?

<activityandroid:theme="@android:style/Theme.Holo.NoActionBar">

<activity android:theme="@android:style/Theme.Holo.NoActionBar">
或者使用Action bar的 hide()方法,如下:


[java] view plain print?

ActionBaractionBar=getActionBar();

actionBar.hide();

ActionBar actionBar = getActionBar();
actionBar.hide();


当Action bar隐藏时,系统会调整你的Activity来填充当前有效的屏幕空间。你能够使用show()方法来再次显示操作栏。

在隐藏和删除Action bar时,要当心为了适应被Action bar占用的空间而导致的Activity的重新布局。如果你的Activity有规律的隐藏和显示Action bar,你可能想要使用覆盖模式。覆盖模式在Activity的顶部描画操作栏,而不是在它们所拥有的屏幕的区域。这样,在Action bar隐藏和重新显示时,你的布局保持不变。要使用覆盖模式,就要给Activity创建一个主题,并且把android:windowActionBarOverlay属性设置为true。

提示:如果你有一个删除了Action bar的定制化的Activity主题,它把android:windowActionBar样式属性设置为false。但是,如果你使用了删除Action bar的一个主题,那么,创建窗口将不允许Action bar再显示,因此,你不能在以后给这个Activity添加Action bar---因为getActionBar()方法将返回null。


添加操作项

有些时候,你可能想要让用户直接访问选项菜单中的一个项目,因此你要把应该在Action bar中显示的菜单项作为一个操作项来声明。操作项能够能够包含一个图标或文本标题。如果一个菜单项不作为一个操作项显示,那么系统就会把它放到悬浮菜单中。悬浮菜单既可以通过设备的Menu按钮来显示,也可以在Action bar中一个额外的按钮来显示。

当Activity首次启动时,系统会调用onCreateOptionsMenu()方法给你的Activity组装Action bar和悬浮菜单。在这个回调方法中应该加载在XML文件中定义的菜单项资源,如:

[java] view plain print?

@Override

(Menumenu){

MenuInflaterinflater=getMenuInflater();

inflater.inflate(R.menu.main_activity,menu);

returntrue;

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity, menu);
return true;
}

图2. 带有图标和文本标题的两个操作项,和悬浮菜单按钮。

在XML文件中,你能够通过给<item>元素声明android:showAsAction=”ifRoom”属性,请求把一个菜单项作为一个操作项来显示。用这种方式,只在有有效的空间时,菜单项才能显示在Action bar中。如果没有足够的空间,这个菜单项会显示在悬浮菜单中。

如果你的菜单项支持标题和图标---带有android:title和android:icon属性---那么默认情况下,操作项仅显示图标。如果你要显示文本标题,就要给android:showAsAction属性添加withText设置,如:

G. Android各版本间差异

一个好的APP最好支持90%设备,由于不同版本系统提供的API可能不同,所以了解不同版本间系统差异很重要,这样才能更好的适配更多的智能设备。

Android4.X

Android5.X 这是一个里程碑的版本

Android6.X

Android7.X

Android8.X

Android9.0
对更大屏幕显示的追求和视觉等体验的优化,智能的开始体现(用户行为的学习及正确化引导,网络环境的智能适应,电池电量的优化),更加人性化。

参考文档:
Android从1.0到 6.0各版本的差别
大致总结一下 安卓各大版本的差异(安卓4以上版本)
Android 9.0新特性
关于Android Pie(Android 9.0),你想知道的都在这了

H. Android网络请求知识(三)授权,TCP/IP,HTTPS建立过程

由身份或持有的令牌确认享有的权限,登录过程实质上的目的也是为了确认权限。

Cookie是客户端给服务器用的,setCookie是服务器给客户端用的。cookie由服务器处理,客户端负责存储

客户端发送cookie:账户和密码
服务端收到后确认登录setCookie:sessionID=1,记下sessionID
客户端收到sessionID后记录,以后请求服务端带上对比记录下sessionID,说明已经登录

会话管理:登录状态,购物车
个性化:用户偏好,主题
Tracking:分析用户行为

XXS:跨脚本攻击,及使用JavaScript拿到浏览器的cookie之后,发送到自己的网站,以这种方式来盗用用户Cookie。Server在发送Cookie时,敏感的Cookie加上HttpOnly,这样Cookie只能用于http请求,不能被JavaScript调用
XSRF:跨站请求伪造。Referer 从哪个网站跳转过来

两种方式:Basic和Bearer

首先第三方网站向授权网站申请第三方授权合作,拿到授权方颁发的client_id和client_secret(一般都是appid+appkey的方式)。

在这就过程中申请的client_secret是服务器持有的,安全起见不能给客户端,用服务端去和授权方获取用户信息,再传给客户端,包括④,⑤的请求过程也是需要加密的。这才是标准的授权过程。
有了access_token之后,就可以向授权方发送请求来获取用户信息

步骤分析就是上面的内容,这里把第4,6,8请求的参数分析一下
第④步参数:
response_type:指授权类型,必选,这里填固定值‘code’
client_id:指客户端id,必选,这里填在平台报备时获取的appid
redirect_uri:指重定向URI,可选
scope:指申请的权限范围,可选
state:指客户端当前状态,可选,若填了,则认证服务器会原样返回该值

第⑥步参数:
grant_type:指使用哪种授权模式,必选,这里填固定值‘authorization_code’
code:指从第⑤步获取的code,必选
redirect_uri:指重定向URI,必选,这个值需要和第④步中的redirect_uri保持一致
client_id:指客户端id,必选,这里填在平台报备时获取的appid
client_secret:指客户端密钥,必选,这里填在平台报备时获取的appkey

第⑧步参数:
access_token:指访问令牌,必选,这里填第⑦步获取的access_token
token_type:指令牌类型,必选,大小写不敏感,bearer类型 / mac类型
expires_in:指过期时间,单位秒,当其他地方已设置过期时间,此处可省略该参数
refresh_token:指更新令牌,可选,用即将过期token换取新token
scope:指权限范围,可选,第④步中若已申请过某权限,此处可省略该参数

我们在上面的第八步中会有refresh_token的参数,这个在实际操作中也比较常见

有时候我们在自己的项目中,将登陆和授权设计成类似OAuth2的过程,不过去掉Authorization code。登陆成功返回access_token,然后客户端再请求时,带上access_token。

我们常常会说到TCP/IP,那到底是什么呢。这就需要讲到网络分层模型。TCP在传输层,IP在网络层。那为什么需要分层?因为网络不稳定,导致需要重传的问题。为了提高传输效率我们就需要分块,在传输层中就会进行分块。TCP还有两个重要的内容就是三次握手,四次分手。

HTTPS 协议是由 HTTP 加上TLS/SSL协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护

1.客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度),客户端随机数,hash算法。

2.服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件,服务端随机数。服务器的加密组件内容是从接收到客户端加密组件内筛选出来的。

3.之后服务器发送Certificate报文。报文中包含公开密钥证书。一般实际有三层证书嵌套,其实像下面图二直接用根证书机构签名也是可以的,但是一般根证书机构比较忙,需要类似中介的证书机构来帮助。

4.最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。

5.SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。

6.接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。

7.客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密报文作为判定标准。

8.服务器同样发送Change Cipher Spec报文。

9.服务器同样发送Finished报文。

10.服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP响应。

11.应用层协议通信,即发送HTTP响应。

12.最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。

利用客户端随机数,服务端随机数,per-master secret随机数生成master secret,再生成客户端加密密钥,服务端加密密钥,客户端MAC secert,服务端MAC secert。MAC secert用于做报文摘要,这样能够查知报文是否遭到篡改,从而保护报文的完整性。

Android网络请求知识(一)HTTP基础概念
Android网络请求知识(二)对称和非对称加密、数字签名,Hash,Base64编码
Android网络请求知识(三)授权,TCP/IP,HTTPS建立过程

热点内容
java类接口的区别 发布:2025-05-20 16:47:13 浏览:115
安卓哪个版本电池好 发布:2025-05-20 16:31:32 浏览:337
安卓手机如何强制刷机荣耀 发布:2025-05-20 16:25:01 浏览:513
繁体语言编译器 发布:2025-05-20 16:01:22 浏览:437
wifi密码忘了怎么设置 发布:2025-05-20 15:47:56 浏览:883
宝马x5买什么配置的好 发布:2025-05-20 15:47:49 浏览:44
sql脚本加斜杠 发布:2025-05-20 15:40:21 浏览:622
搭建服务器创建小程序 发布:2025-05-20 15:34:40 浏览:625
精通脚本 发布:2025-05-20 14:42:56 浏览:385
东方财富经典版如何更改密码 发布:2025-05-20 14:42:43 浏览:944