From ab86340a1b702277ca19411a5b531b92c6036ea7 Mon Sep 17 00:00:00 2001 From: lzl <1239365383@qq.com> Date: Wed, 5 Nov 2025 11:08:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=90=88=E5=B9=B6=20?= =?UTF-8?q?=E8=87=B3=202025.11.3=20=2020:29?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/libs.versions.toml | 48 - moduleUtil/build.gradle | 9 +- moduleUtil/src/main/assets/page_show.htm | 838 +++++++++++++++++- .../moduleutil/base/CommonAppContext.java | 8 +- .../moduleutil/bean/room/RoomSettingBean.java | 3 + .../listener/MessageListenerSingleton.java | 44 +- .../com/xscm/moduleutil/rtc/AgoraManager.java | 188 +++- .../moduleutil/utils/DateSelectDialog.java | 58 +- .../utils/PermissionDescriptionHelper.java | 131 +++ .../xscm/moduleutil/utils/SPConstants.java | 2 + .../com/xscm/moduleutil/utils/SpUtil.java | 8 +- .../utils/config/EnvironmentEnum.java | 16 +- .../utils/config/EnvironmentPrefs.java | 20 - .../utils/location/GmsLocationProvider.java | 2 +- .../dialog/RewardGiftDialogFragment.java | 12 + .../drawable-xxxhdpi/ic_topbar_back_dark.png | Bin 0 -> 705 bytes .../drawable/ps_demo_permission_desc_bg.xml | 7 + .../main/res/mipmap-hdpi/accompany_off.webp | Bin 0 -> 858 bytes .../main/res/mipmap-hdpi/accompany_on.webp | Bin 0 -> 822 bytes .../src/main/res/mipmap-hdpi/icon_liang.webp | Bin 0 -> 1282 bytes .../main/res/mipmap-hdpi/muisc_reward.webp | Bin 0 -> 738 bytes .../main/res/mipmap-hdpi/muisc_switch.webp | Bin 0 -> 556 bytes .../src/main/res/mipmap-hdpi/muisc_tyt.webp | Bin 0 -> 692 bytes .../main/res/mipmap-xhdpi/accompany_off.webp | Bin 0 -> 1218 bytes .../main/res/mipmap-xhdpi/accompany_on.webp | Bin 0 -> 1186 bytes .../src/main/res/mipmap-xhdpi/icon_liang.webp | Bin 0 -> 1610 bytes .../main/res/mipmap-xhdpi/muisc_reward.webp | Bin 0 -> 988 bytes .../main/res/mipmap-xhdpi/muisc_switch.webp | Bin 0 -> 646 bytes .../src/main/res/mipmap-xhdpi/muisc_tyt.webp | Bin 0 -> 754 bytes .../main/res/mipmap-xxhdpi/accompany_off.webp | Bin 0 -> 1988 bytes .../main/res/mipmap-xxhdpi/accompany_on.webp | Bin 0 -> 1932 bytes .../main/res/mipmap-xxhdpi/icon_liang.webp | Bin 0 -> 2912 bytes .../main/res/mipmap-xxhdpi/muisc_reward.webp | Bin 0 -> 1618 bytes .../main/res/mipmap-xxhdpi/muisc_switch.webp | Bin 0 -> 1086 bytes .../src/main/res/mipmap-xxhdpi/muisc_tyt.webp | Bin 0 -> 1250 bytes moduleUtil/src/main/res/values/colors.xml | 1 + .../login/activity/ImproveInfoActivity.java | 2 + .../activity/main/activity/MainActivity.java | 87 +- .../plaza/activity/ReleaseActivity.java | 21 +- .../activity/room/activity/RoomActivity.kt | 134 +-- .../room/contacts/RoomSettingContacts.java | 2 + .../room/fragment/FriendshipRoomFragment.java | 39 +- .../room/fragment/RankingChildFragment.java | 6 +- .../RoomBackgroundDialogFragment.java | 2 + .../room/fragment/RoomKtvFragment.java | 82 +- .../room/fragment/SingSongFragment.java | 17 +- .../room/presenter/RoomSettingPresenter.java | 18 + .../user/activity/AlbumDetailActivity.java | 14 +- .../user/activity/CreateAlbumActivity.java | 3 +- .../user/activity/CreatedRoomActivity.java | 3 +- .../user/activity/EditUserInfoActivity.java | 4 +- .../user/activity/SettingActivity.java | 43 +- .../adapter/RoomSettingAdapter.java | 2 + .../dialog/RoomGiftDialogFragment.java | 11 + .../dialog/RoomSettingFragment.java | 41 +- .../dialog/RoomUserInfoFragment.java | 218 ++--- .../dialog/TunerDialogFragment.java | 79 +- .../main/res/layout/activity_improve_info.xml | 9 +- .../src/main/res/layout/activity_release.xml | 212 ++--- .../src/main/res/layout/activity_setting.xml | 1 - .../src/main/res/layout/fragment_room_ktv.xml | 30 +- .../classicui/page/TUIC2CChatFragment.java | 118 ++- .../classicui/widget/input/InputView.java | 8 + 63 files changed, 2025 insertions(+), 576 deletions(-) create mode 100644 moduleUtil/src/main/java/com/xscm/moduleutil/utils/PermissionDescriptionHelper.java create mode 100644 moduleUtil/src/main/res/drawable-xxxhdpi/ic_topbar_back_dark.png create mode 100644 moduleUtil/src/main/res/drawable/ps_demo_permission_desc_bg.xml create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/accompany_off.webp create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/accompany_on.webp create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/icon_liang.webp create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/muisc_reward.webp create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/muisc_switch.webp create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/muisc_tyt.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/accompany_off.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/accompany_on.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/icon_liang.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/muisc_reward.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/muisc_switch.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/muisc_tyt.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/accompany_off.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/accompany_on.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/icon_liang.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/muisc_reward.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/muisc_switch.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/muisc_tyt.webp diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 19c00861..1d562373 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,15 +3,9 @@ agp = "8.4.0" alipayAlipaysdkAndroid = "15.8.33" arouterApiVersion = "1.5.2" comJacktuotuoCustomviewVerificationcodeview2 = "1.0.5" -comLiulishuoOkdownloadOkdownload4 = "1.0.7" -comLiulishuoOkdownloadSqlite3 = "1.0.7" -comLiulishuoOkdownloadOkhttp3 = "1.0.7" -comLiulishuoOkdownloadFiledownloader3 = "1.0.7" -custompopwindow = "2.1.1" databindingRuntimeVersion = "7.0.2" easypermissions = "3.0.0" easyProtectorRelease = "1.1.2" -egameAnimplayer = "2.0.8" flexboxVersion = "1.0.0" githubBannerviewpagerVersion = "3.5.12" githubGlide = "4.12.0" @@ -20,28 +14,23 @@ githubPhotoview = "2.3.0" githubRealtimeblurviewVersion = "1.2.1" githubShadowlayout = "3.3.1" gradle = "8.8.0" -#gradle = "8.5.0-alpha04" greendaoGradlePlugin = "3.3.0" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" appcompat = "1.6.1" -libraryVersion = "1.4" lombok = "1.18.32" marqueeview = "1.1.0" material = "1.10.0" activity = "1.8.0" constraintlayout = "2.1.4" -arouter = "1.0.2" arouterAnnotation = "1.0.6" arouterCompiler = "1.5.2" -arouterApi = "1.5.2" comSquareupRetrofit2Retrofit3 = "2.9.0" fastjson = "1.2.60" githubBaserecyclerviewadapterhelper = "2.9.50" gsonVersion = "2.10.1" -eventbusAnnotationProcessorVersion = "3.3.1" eventbusVersion = "3.3.1" logger = "2.2.0" loggingInterceptorVersion = "3.10.0" @@ -49,35 +38,25 @@ multidex = "2.0.1" ossAndroidSdkVersion = "2.9.21" permissionx = "1.7.1" persistentcookiejar = "v1.0.1" -picture_libraryVersion = "v2.6.0" reactivexRxjava = "2.2.21" retrofit2KotlinCoroutinesAdapterVersion = "0.9.2" roundedimageview = "2.3.0" rxandroid = "2.1.1" scwangSmartrefreshlayout = "1.1.0-alpha-20" scwangSmartrefreshheader = "1.1.0-alpha-20" -singledateandtimepicker = "2.2.7" svgaplayerAndroid = "2.5.13" toastVersion = "8.2" togglebuttonLibraryVersion = "1.0.0" utilcode = "1.30.6" -databindingRuntime = "8.8.0" -datastoreCoreAndroid = "1.1.5" -kotlin = "2.0.0" -lifecycleRuntimeKtx = "2.6.1" -activityCompose = "1.8.0" -composeBom = "2024.04.01" kotlinVersion = "1.9.24" coreKtx = "1.10.1" lifecycleLivedataKtx = "2.6.1" lifecycleViewmodelKtx = "2.6.1" -webpdecoder = "1.6.4.9.0" wechatSdkAndroid = "6.8.30" xbanner = "1.7.0" appcompatVersion = "1.3.1" legacySupportV4 = "1.0.0" fragmentKtx = "1.5.6" -cosAndroidLite = "5.9.46" interpolator = "1.0.0" [libraries] @@ -89,19 +68,12 @@ com-github-bumptech-glide-glide = { module = "com.github.bumptech.glide:glide", com-github-mmin18-realtimeblurview = { module = "com.github.mmin18:realtimeblurview", version.ref = "githubRealtimeblurviewVersion" } com-github-zhpanvip-bannerviewpager = { module = "com.github.zhpanvip:bannerviewpager", version.ref = "githubBannerviewpagerVersion" } com-jacktuotuo-customview-verificationcodeview3 = { module = "com.jacktuotuo.customview:verificationcodeview", version.ref = "comJacktuotuoCustomviewVerificationcodeview2" } -#com-liulishuo-okdownload-filedownloader4 = { module = "com.liulishuo.okdownload:filedownloader", version.ref = "comLiulishuoOkdownloadFiledownloader3" } -#com-liulishuo-okdownload-okhttp4 = { module = "com.liulishuo.okdownload:okhttp", version.ref = "comLiulishuoOkdownloadOkhttp3" } -#com-liulishuo-okdownload-sqlite4 = { module = "com.liulishuo.okdownload:sqlite", version.ref = "comLiulishuoOkdownloadSqlite3" } -#com-liulishuo-okdownload-okdownload6 = { module = "com.liulishuo.okdownload:okdownload", version.ref = "comLiulishuoOkdownloadOkdownload4" } -#custompopwindow = { module = "com.github.pinguo-zhouwei:CustomPopwindow", version.ref = "custompopwindow" } databinding-runtime-v702 = { module = "androidx.databinding:databinding-runtime", version.ref = "databindingRuntimeVersion" } dpa-oss-android-sdk = { module = "com.aliyun.dpa:oss-android-sdk", version.ref = "ossAndroidSdkVersion" } easy-protector-release = { module = "com.lahm.library:easy-protector-release", version.ref = "easyProtectorRelease" } easypermissions = { module = "pub.devrel:easypermissions", version.ref = "easypermissions" } -#egame-animplayer = { module = "com.egame.vap:animplayer", version.ref = "egameAnimplayer" } github-photoview = { module = "com.github.chrisbanes:PhotoView", version.ref = "githubPhotoview" } github-shadowlayout = { module = "com.github.lihangleo2:ShadowLayout", version.ref = "githubShadowlayout" } -#glide-compiler = { module = "com.github.bumptech.glide:compiler", version.ref = "githubGlide" } gradle = { module = "com.android.tools.build:gradle", version.ref = "gradle" } greendao-gradle-plugin = { module = "org.greenrobot:greendao-gradle-plugin", version.ref = "greendaoGradlePlugin" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -113,7 +85,6 @@ marqueeview = { module = "com.sunfusheng:marqueeview", version.ref = "marqueevie material = { group = "com.google.android.material", name = "material", version.ref = "material" } activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } -#arouter-api = { module = "com.alibaba:arouter-api", version.ref = "arouterApi" } arouter-compiler = { module = "com.alibaba:arouter-compiler", version.ref = "arouterCompiler" } arouter-annotation = { module = "com.alibaba:arouter-annotation", version.ref = "arouterAnnotation" } com-scwang-smartrefresh-smartrefreshheader = { module = "com.scwang.smartrefresh:SmartRefreshHeader", version.ref = "scwangSmartrefreshheader" } @@ -124,39 +95,22 @@ github-baserecyclerviewadapterhelper = { module = "com.github.CymChad:BaseRecycl hjq-toast = { module = "com.hjq:toast", version.ref = "toastVersion" } jakewharton-retrofit2-kotlin-coroutines-adapter = { module = "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter", version.ref = "retrofit2KotlinCoroutinesAdapterVersion" } greenrobot-eventbus = { module = "org.greenrobot:eventbus", version.ref = "eventbusVersion" } -#greenrobot-eventbus-annotation-processor = { module = "org.greenrobot:eventbus-annotation-processor", version.ref = "eventbusAnnotationProcessorVersion" } google-gson = { module = "com.google.code.gson:gson", version.ref = "gsonVersion" } logger = { module = "com.orhanobut:logger", version.ref = "logger" } multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" } -#numberprogressbar-library = { module = "com.daimajia.numberprogressbar:library", version.ref = "libraryVersion" } okhttp3-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "loggingInterceptorVersion" } permissionx = { module = "com.guolindev.permissionx:permissionx", version.ref = "permissionx" } persistentcookiejar = { module = "com.github.franmontiel:PersistentCookieJar", version.ref = "persistentcookiejar" } -#pictureselector-picture_library = { module = "com.github.LuckSiege.PictureSelector:picture_library", version.ref = "picture_libraryVersion" } reactivex-rxjava = { module = "io.reactivex.rxjava2:rxjava", version.ref = "reactivexRxjava" } roundedimageview = { module = "com.makeramen:roundedimageview", version.ref = "roundedimageview" } rxandroid = { module = "io.reactivex.rxjava2:rxandroid", version.ref = "rxandroid" } -#singledateandtimepicker = { module = "com.github.florent37:singledateandtimepicker", version.ref = "singledateandtimepicker" } squareup-converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "comSquareupRetrofit2Retrofit3" } retrofit2-adapter-rxjava2 = { module = "com.squareup.retrofit2:adapter-rxjava2", version.ref = "comSquareupRetrofit2Retrofit3" } svgaplayer-android = { module = "com.github.yyued:SVGAPlayer-Android", version.ref = "svgaplayerAndroid" } utilcode = { module = "com.blankj:utilcode", version.ref = "utilcode" } -#databinding-runtime = { group = "androidx.databinding", name = "databinding-runtime", version.ref = "databindingRuntime" } -#datastore-core-android = { group = "androidx.datastore", name = "datastore-core-android", version.ref = "datastoreCoreAndroid" } -#lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } -#activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } -#compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } -#ui = { group = "androidx.compose.ui", name = "ui" } -#ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } -#ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } -#ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } -#ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } -#ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } -#material3 = { group = "androidx.compose.material3", name = "material3" } core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycleLivedataKtx" } lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } -#webpdecoder = { module = "com.zlc.glide:webpdecoder", version.ref = "webpdecoder" } wechat-sdk-android = { module = "com.tencent.mm.opensdk:wechat-sdk-android", version.ref = "wechatSdkAndroid" } xbanner = { module = "com.github.xiaohaibin:XBanner", version.ref = "xbanner" } zcw-togglebutton-library = { module = "com.zcw:togglebutton-library", version.ref = "togglebuttonLibraryVersion" } @@ -170,8 +124,6 @@ androidx-interpolator = { group = "androidx.interpolator", name = "interpolator" android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinVersion" } -#kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlinVersion" } -#alibaba-arouter = { id = "com.alibaba.arouter", version.ref = "arouter" } greendao-plugin = { id = "org.greenrobot.greendao", version.ref = "greendaoGradlePlugin" } kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlinVersion" } kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlinVersion" } diff --git a/moduleUtil/build.gradle b/moduleUtil/build.gradle index 870c171c..2a96005c 100644 --- a/moduleUtil/build.gradle +++ b/moduleUtil/build.gradle @@ -67,8 +67,6 @@ dependencies { implementation project(':moduletablayout') implementation libs.activity implementation libs.constraintlayout - implementation libs.androidx.appcompat - implementation libs.androidx.appcompat testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core @@ -169,14 +167,15 @@ dependencies { //播放器 //腾讯直播sdk - api('com.tencent.liteav:LiteAVSDK_Professional:10.9.0.13102') - api('com.google.android.exoplayer:exoplayer-core:2.19.1') - api('com.google.android.exoplayer:exoplayer-ui:2.19.1') +// api('com.tencent.liteav:LiteAVSDK_Professional:10.9.0.13102') +// api('com.google.android.exoplayer:exoplayer-core:2.19.1') +// api('com.google.android.exoplayer:exoplayer-ui:2.19.1') api("com.egame.vap:animplayer:2.0.8") api("com.liulishuo.okdownload:okdownload:1.0.7") api('com.zlc.glide:webpdecoder:1.6.4.9.0') api('com.jungly:gridPasswordView:0.3') + // 带有气泡的提示框,目前没有使用,暂不使用,使用位置是在RoomTipsView api('com.cpiz.bubbleview:bubbleview:1.0.2') // 集成音频 SDK声网 diff --git a/moduleUtil/src/main/assets/page_show.htm b/moduleUtil/src/main/assets/page_show.htm index 3587610e..50250ee3 100644 --- a/moduleUtil/src/main/assets/page_show.htm +++ b/moduleUtil/src/main/assets/page_show.htm @@ -1,3 +1,837 @@ - -
羽声语音直播隐私保护政策
本版本更新日期:2025年【9】月【4】日
本版本生效日期:2025年【9】月【4】日
引言:
羽声语音深知个人信息对用户(以下或称“您”)的重要性。我们将按法律法规要求,采取严格的安全保护措施,尽力保护您的个人隐私信息安全可控,故我们特定制本《羽声语音隐私保护政策》(以下简称 “本政策”)。 以便您充分了解,在您使羽声语音直播的产品或服务的过程中,我们如何处理您的个人信息,以及您可以如何管理您的个人信息。
本政策将帮助您了解如下内容:
一、定义及适用范围
二、我们如何收集和使用您的个人信息
三、我们如何使用Cookie和第三方H5页面
四、我们如何共享、转让、公开披露您的个人信息
五、我们如何存储和保护您的个人信息
六、您如何管理您的个人信息
七、未成年人保护
八、本政策的更新
九、联系我们
十、其他
【特别提示】请您在使用我们各项产品或服务前,仔细阅读并透彻理解本政策,特别是以粗体/下划线/粗体下划线等有特殊标识的条款,您应重点阅读,在确认充分理解并同意后使用相关产品或服务。如果您不同意我们收集您的任何个人信息,您应当立即停止使用并退出羽声语音直播。当您使用或继续使用我们的产品或服务时,即表示您同意我们按照本政策来处理您的相关信息。
如对本政策内容有任何疑问,您可以通过本政策中“联系我们”一节提供的联系方式与我们联系。
一、定义及适用范围
(一)定义
1、羽声语音软件及相关服务:指由西安熙晟文化传媒有限公司(注册地址:陕西省西安市高新区天谷八路156号软件新城云汇谷A6西户2层201-2-275 及其关联方通过合法拥有并运营的、标注名称为羽声语音、羽声语音极速版的客户端应用程序、APP、微信小程序、微信公众号、羽声语音官方网站(http://gw.limaoyuyin.cn)、通过APK、SDK、API等方式向您提供的软件和/或服务及随技术发展出现的新形态向您提供的产品与服务。
2、关联方:指在现在、将来控制西安熙晟文化传媒有限公司、受西安熙晟文化传媒有限公司控制或与西安熙晟文化传媒有限公司处于共同控制下的公司、机构。
3、未成年人:指不满十八周岁的自然人。十六周岁以上的未成年人,以自己的劳动收入为主要生活来源的,视为完全民事行为能力人。
4、儿童:指不满十四周岁的未成年人。
(二)适用范围
本政策适用于羽声语音的产品或服务。如我们关联公司的产品或服务中使用了羽声语音直播提供的产品或服务,则本政策同样适用于该部分产品或服务。但请您注意,本政策不适用于以下情况:
1、为我们的产品或服务提供广告服务的第三方的信息收集/处理做法;
2、我们的产品或服务可能会包含或链接至第三方提供的信息与/或第三方服务(包括任何第三方应用、网站、产品、服务等),这些信息与/或服务由第三方负责运营,具体规则请参照该第三方的隐私政策或类似声明;
3、其他非羽声语音向您提供的产品与/或服务内容。
二、我们如何收集和使用您的个人信息
我们收集和使用的您的个人信息类型包括两种:第一种:我们产品与/或服务的基本业务功能所必需的信息:此类信息为产品与/或服务正常运行的必备信息,您须授权我们收集。如您拒绝提供,您将无法正常使用我们的产品与/或服务;第二种:拓展业务功能可能需要收集的信息:此信息为非基本业务功能所需的信息,您可以选择是否授权我们收集。如您拒绝提供,将导致拓展业务功能无法实现或无法达到我们拟达到的效果,但不影响您对基本业务功能的正常使用。
我们在此特别提醒您:我们致力于打造多样的产品和服务以满足您的需求。因我们向您提供的产品和服务种类众多,且不同用户选择使用的具体产品/服务范围存在差异,故基本/拓展功能及对应收集使用的个人信息类型、范围等会有所区别,请以具体的产品/服务功能为准。
我们收集和使用您的个人信息的场景有:
(一)注册成为我们的用户
当您在羽声语音直播上创建羽声语音直播账号时,您需要提供您本人的实名手机号码、验证码并完善相关的网络身份识别信息(包括头像、昵称、登录密码、性别、生日)。您需理解,手机号码、验证码匹配结果、性别、生日均属于您的敏感个人信息,我们收集您的手机号码、验证码是基于法律法规的相关要求。其中:(1)实名手机号码、验证码是为了验证您的身份,满足相关法律规定的网络实名制要求;(2)生日是为了协助判断您是否为年满十八周岁的成年人,若您是未成年人,我们将不对您提供服务,请您谅解,也提请您按真实情况填写相应信息,切勿虚构、假冒;(3)性别是为了向您提供性别匹配服务。上述敏感个人信息,您有权拒绝提供,但将无法使用相关功能或服务,请您谨慎考虑后再选择是否提供。
在您注册账号后,您可以根据自身需求选择填写学校、个性签名、家乡、兴趣爱好等个人主页信息,来帮助您更加形象的展示自我。但如果您不提供这些信息,将不会影响本服务的基本业务功能。您在个人主页发布的上述信息、动态、添加的兴趣标签、游戏名片,以及你的账号等级、ID号、获赞数、粉丝数,将会在账号(包括APP和微信小程序)的个人主页中公开展示,您也可以通过APP设置-隐私进行信息隐藏(不对未关注用户显示可见)或通过第六节所述管理您的个人信息。
(二)进行实名认证
1、为满足相关法律规定及监管要求、确保用户身份真实性、实现反欺诈等风控、保障系统与服务安全(包括依法保护未成年人合法权益、用户权益发放、打击电信网络诈骗等需要),当您使用羽声语音直播中某些特定类型的产品与/或服务,您需要向平台提供您本人的真实姓名及身份证号码信息(敏感个人信息),并可能需要通过您的人脸信息(敏感个人信息)进行身份一致性核验:
(1)在您进行实名认证时,若您选择或产品页面进入火山引擎、腾讯云等第三方的实名认证程序(人脸识别功能),我们及/或第三方会申请、调用终端设备的摄像头权限来采集您的面部识别信息,在您授权后,前述第三方实名认证程序将通过SDK方式获取您的如下敏感个人信息:姓名、身份证件号码、人脸信息(指为验证或识别您的身份而采集的人脸图像、视频,以及基于上述图像、视频提取的面部识别特征),为了准确验证您的身份,第三方需将上述信息与其合法存有的(如基于法律法规或政府部门、有权机关授权或存储)您的个人信息进行比对核验。为了验证实名认证结果的有效性,并及时解决用户就实名认证结果的争议或投诉,您通过以上方式实名认证的,第三方会向我们返回人脸识别验证结果以及为验证或识别您的身份而采集的部分人脸图像、视频(具体以第三方提供为准,此为您的敏感个人信息),除此外,我们会存储您在上述实名认证过程中主动填写的姓名、身份证号码(敏感个人信息)。
当您通过本平台主动选择进行真人头像认证时,经您同意后,我们会收集您上传的头像照片,为了验证您上传的头像照片为您本人,不存在冒用或盗用他人照片、头像的情形,我们将请求您按上述方式通过第三方人脸识别程序完成实名认证,经第三方反馈验证一致的,您上传的头像照片将作为您在羽声语音直播APP内的头像进行公开,具体规则请见《真人头像认证协议》。因此,我们在此提醒您谨慎使用真人头像认证功能,您有权拒绝,且您拒绝不影响您继续使用本平台的基本业务功能。
具体使用的第三方人脸识别程序可通过第四节第(一)条所列《羽声语音直播与第三方共享个人信息清单》查阅。
(2)若您无法通过上述程序完成实名认证,您可以选择通过人工认证方式完成实名认证程序,为了完成实名认证服务,我们将依据相关法律法规获取并存储您的个人身份信息,包括如下:姓名(敏感个人信息)、身份证件类型(包括但不限于相应的身份证、护照、台湾居民来往大陆通行证、港澳居民往来内地通行证等)和相应的证件正反面图片(敏感个人信息)、您手持相应身份证件的照片(敏感个人信息)。
提请您特别注意,您的身份证件信息、您手持身份证件的照片、真人照片、人脸信息均属于敏感个人信息,您可以拒绝提供,如果拒绝提供您将可能无法获得需要实名认证的特定服务,但不影响您正常使用产品的基本业务功能(包括产品的浏览和观看功能);同时,我们将依法记录、保存验证身份信息及验证结果,这些信息仅供完成验证目的,或者其他法律法规所规定的用途,未经您明示授权不会用作其他目的。
2、具体实名场景及对应服务主要包括(具体以您使用的功能为准):
(1)当您申请注册为互联网发布者(主播)、开设个人房时,需要提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并通过您的面部识别信息(敏感个人信息)进行身份一致性核验。通过验证后,您方可在平台上从事直播发布活动。如果您拒绝提供上述信息(您有权拒绝),您将可能无法获得相关服务(开播或开设个人房间),但不影响您正常使用产品的浏览和观看功能。
(2)当您通过羽声语音直播进行充值、消费时(特别是当您使用下单功能时),为了保证您的资金安全,避免未成年人使用下单功能,我们可能需要您提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并可能需要您通过您的面部识别信息(敏感个人信息)进行身份一致性核验。前述信息您可以拒绝提供,您拒绝提供前述信息的,只会使您无法使用羽声语音直播对应功能,但不影响您使用其他功能。
(3)当您使用提现功能,我们会需要您绑定银行卡账号信息、支付宝账号、身份证号码、姓名(敏感个人信息)进行实名认证。在您授权后,我们可能需要通过您的面部识别信息(敏感个人信息)进行身份一致性核验。您可以拒绝提供前述信息,但您拒绝提供将导致您无法使用对应功能,但不影响您使用羽声语音直播的其他功能。
(4)在账号冻结、封禁申诉时,为了核实争议账号是您本人持有,平台还将使用您注册时使用的实名手机号码、身份证件信息(敏感个人信息)进行身份核实认证。
(5)基于依法保护未成年人权益的需求,我们为未成年人提供了青少年模式,若您拟解除、退出青少年模式,我们会需要您提供真实姓名、身份证件信息(敏感个人信息),并在您授权后,我们可能需要通过您的面部识别信息进行身份一致性核验。如果您拒绝提供前述信息,您将无法退出青少年模式,但不影响您在青少年模式下使用羽声语音直播产品和服务。
(三)为您提供服务内容的浏览/播放/搜索/下载
1、当您进行直播间、聊天室、视频、音频等服务内容的浏览、播放、下载功能时,为与您的移动设备进行必要的适配,向您提供连续性、一致化的使用体验以及最优化的页面展示,我们需要收集您的设备信息、个人上网记录。
设备信息包括:浏览器类型、设备型号、操作系统版本、设备设置、DEVICEID、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID、UDID、UUID、MEID及其他设备标识符、设备环境。
个人上网记录包括:浏览/点击/播放记录、收藏/关注/预约记录、点赞/分享/发布记录等。
我们收集这些信息是为了向您提供直播间、视频、音频等内容的浏览、播放和展示服务,如您拒绝提供上述权限将可能导致您无法使用我们的相关产品与服务。请您理解,单独的设备信息、日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。
2、当您使用我们提供的搜索功能时,我们还会收集您搜索的关键字信息、设备信息(包括设备型号、操作系统版本、设备设置、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID等设备标识符、设备环境)、日志信息(包括您的浏览记录和时间、您搜索的时间以及次数)。我们收集这些信息是为了方便您后续查找时无需再次输入,并向您快速匹配您所需要的内容以及您可能感兴趣的内容,为了提供高效的搜索服务,部分前述信息会暂时存储在您的本地存储设备之中,并可向您展示搜索结果内容、搜索历史记录。您可以自主删除前述搜索记录。搜索的关键词信息通常无法单独识别您的个人身份,不属于您的个人信息,不在本政策的限制范围内。但当您的搜索关键词信息与您的其他信息有联结并可识别您的个人身份时,在结合使用期间,我们会将您的搜索关键词信息作为您的个人信息,与您的搜索历史记录一同按照本政策对其进行处理与保护。
当您分享/接收被分享的信息时,我们会在您进入羽声语音直播时访问您的剪切板,写入或读取其中包含的文字、链接、口令、分享码,以实现分享、跳转功能。我们不会收集、存储剪切板的其他信息。
3、当您使用下载功能时,经您同意后,我们会访问您的存储权限,以便在您设备外置存储空间内写入相关文件。如您拒绝提供,仅会使您无法使用该功能,但并不影响您正常使用产品或服务的其他功能。同时,您也可以随时通过您设备的相关功能设置开启/取消该权限。
(五)帮助您上传或发布图文、音频和视频
1、若您通过羽声语音直播的社区功能或通过羽声语音直播的评论、分享、发帖、发布动态等功能上传/发布/编辑图文、音频、视频时,当您使用到具体功能时,我们将向您分别单独请求访问您设备的相机/摄像头权限、相册权限(IOS端)/存储权限(安卓端)、录音/麦克风权限:(1)经您同意授权相机/摄像头权限后,我们会访问您的相应权限,以便您拍摄照片、视频,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息;(2)经您同意授权相册权限(IOS端)/存储权限(安卓端)后,我们会访问您的相应权限,以便您查看、选择相册里的图片/视频发布动态、反馈意见,设置与更换头像、封面,聊天时分享图片/视频,以及保存图片/视频至相册,您还可以在其他场景访问设备里的照片、音频和视频,以及保存内容到设备;(3)经您同意授权录音/麦克风权限后,我们会访问您的相应权限,以便识别您上传的语音信息,并采集、识别上述功能实现过程中所录制、输入的音频信息。如您拒绝提供上述权限的仅会使您无法使用该功能,但并不影响您正常使用产品/服务的其他功能,同时,您也可以随时通过您的设备系统或使用我们的产品/服务的相关功能设置页面开启/取消该权限。
2、如您自愿填写信息或自愿发布内容的,我们会收集您上传的视频、照片、音视频、帖子、评论、点赞、关注、分享信息、浏览及搜索信息。您可随时删除您发布的照片、音视频、帖子及评论内容。为了验证您发布内容的合法合规性,避免您发布的内容涉及违法或侵犯第三方合法权益的情形。您同意我们为了上述目的将您发布的图文、音频、视频内容提供给我们的服务提供商,并由我们的服务提供商对上述内容进行审核、标注后向我们反馈结果。我们不会向上述服务商传输或共享您的个人信息,我们仅会对您发布内容的合法合规性进行审核。
3、当您使用设备相机扫描二维码时,我们将访问您设备的相机/摄像头权限。如您拒绝提供的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备的设置开启/取消该权限。
4、您在使用动态发布等功能时发布的公开信息可能涉及您或他人的个人信息或个人隐私信息,如您在分享、评论时选择上传的包括个人信息的图片或视频。您应更为谨慎考虑是否公开该等信息,以及获得合法权利人授权后再行发布,同时如该等信息中涉及未成年人个人信息的,您应在发布前征得其监护人同意。
(六)录制音视频及提供直播功能
当您使用录制音视频、使用个人房间服务以及直播服务时,经您分别授权我们将访问您设备的相机/摄像头权限(当您同意开启此项权限后,我们会使用您设备上的相机拍摄功能。此项功能将用于实现照片拍摄、录制视频功能,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息)、录音(麦克风)相关权限(当您同意开启此项权限后,我们会使用您设备上的麦克风功能,并会识别您上传的语音信息。此项权限将用于实现语音输入功能,并采集、识别上述功能实现过程中所输入的语音信息),如您拒绝授权的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备设置开启/取消该权限。此外,为保证您使用直播或聊天室功能时的流畅度、节省您的流量,我们会收集您使用该功能时段内使用流量的大小。
(七)消费与提现
当您通过羽声语音购买商品和/或服务时(如SVIP会员购买、购买虚拟商品、个性装扮、礼物),为帮助您完成交易、保障交易安全、提供订单查询、客服及售后服务,我们需要根据商品的类型收集如下部分或全部的订单信息:下单时间、订单编号、订单状态、交易的商品信息、支付信息(支付金额、支付方式、支付流水号、支付状态、第三方支付渠道的支付账号,敏感个人信息)、虚拟商品消费使用记录、会员开通时间。为此,为保障您的账户和资金安全以及支付服务的安全稳定运行、履行反电信网络诈骗等法定义务,我们还会收集您必要的设备信息(IP地址)并提供给您选择的第三方支付渠道。为向您提供售后与争议解决服务之目的,我们需要及时获悉并确认交付、售后的进度及状态,您同意我们可自相应第三方处收集与交付、售后进度相关的信息。我们向您承诺,我们会以最大努力保障您的个人信息安全,并严格要求第三方对您的个人信息保密,只以交付、售后之目的获悉和使用,不得对外泄露或做其他任何用途。您可以拒绝提供前述信息,但您拒绝提供将导致您无法使用对应功能,但不影响您使用羽声语音直播的基本业务功能。
当您使用提现功能时,为了完成支付结算,我们会收集、使用您主动填写的收款账户信息(银行卡账号信息及开户行信息、支付宝账号及/或微信账号,具体以您填写为准)以及身份证号码、姓名,并会共享给第三方支付结算机构(请见第四节第(一)项)。前述信息为敏感个人信息,您可以拒绝提供,您拒绝提供将导致您无法使用对应提现功能,但不影响您使用羽声语音直播的其他功能。
(八)客户服务
当您主动填写羽声语音APP上的反馈意见(如帮助与反馈-意见反馈页面)、举报投诉页面时,我们会收集您主动填写的手机号、反馈/举报投诉内容(请谨慎考虑后再决定是否填写),我们收集信息仅用于收集您的意见,便于与您联系、尽快帮助您解决问题。
当您向我们发起投诉、申诉或进行咨询时,为了保障您的账户及系统安全,我们需要您提供必要的个人信息(包括账号信息、姓名、手机号、身份证以及其他必要身份信息)以核验您的用户身份。为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会收集您与我们的沟通信息(包括文字/图片/音视频/通话记录形式)、您为了证明相关事实提供的信息、与客服需求相关联的其他必要信息。如您针对具体的订单发起客服需求的,我们还会使用您的订单信息。
以上信息为您的个人敏感信息,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。
(九)为您提供安全保障服务
为了使羽声语音直播产品及服务与您的移动设备进行必要的适配,提高您使用我们及我们合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免受侵害,更好的预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络入侵等安全风险,分析当前设备的风险等级,有效识别各种作弊行为、风险设备、恶意刷量、恶意程序、保护您的账号安全,我们会收集为实现安全保障功能的必要信息,我们会获取您的以下信息:
1、网络访问日志信息和用户日志信息。包括:网络信息(如网络类型)、运营商信息(如SIM卡信息)、账号信息(如账号登录地)以及使用“羽声语音直播”产品或服务的频率、崩溃数据、总体安装、使用情况、性能数据、服务故障等信息。
2、您的设备信息。包括:设备型号、操作系统、设备序列号/SN、设备标识符(如IMEI/IMSI/Android ID/IDFA/OpenUDID/GUID/ICCID/ UUID/MEID/DEVICEID)、设备MAC地址、应用列表、登陆IP地址、软件版本号、接入网络的方式、类型和状态、设备当前运行进程/运行中进程信息、设备传感器信息、蓝牙信息屏幕尺寸等参数信息,同时为了保证您的账号安全,我们会检测您设备的root状态。请您注意,为了便于您及时接收、发送聊天消息、接收消息通知,我们会在后台状态下获取您设备的MAC地址。
我们可能会使用或整合您的上述日志信息与设备信息、账户信息、交易信息、支付信息以及其他取得您授权或依据法律共享的信息,综合判断您账户及交易风险、完成身份验证、检测,防范安全事件,并依法采取必要的记录、审计、分析、处置措施,保护各方合法权益稳定不受侵害。
您理解并同意,为了帮助我们进行bug分析、反作弊、反黑产等安全保护工作,保障您正常使用本产品与/或服务、保障您的账号安全,在您的羽声语音App每次切换至后台或处于静默状态下或重新启动时,我们会收集您的Mac地址信息(包括手机Mac地址和蓝牙Mac地址)、IMEI、获取运行中进程信息、设备序列号、Android ID、DEVICEID,我们将把读取频次控制在合理范围内。
请您理解,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。
同时,为了维护网络安全、保障良好生态,便于公众为公共利益实施监督,依据《互联网用户账号信息管理规定》等法律规定,您的IP地址所对应的归属地域信息将会展示在您的个人资料页。境内展示到省(区、市),境外展示到国家或地区,信息以网络运营商数据为准,请您理解,该信息不会泄露您的详细地址,相关展示暂不支持手动开启或关闭。
(十)我们获取的设备权限
为确保相关业务功能的正常实现,我们需要根据具体的使用场景调用对应的必要权限。请您注意,您开启任一权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,若您关闭任一权限或取消授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。
(十一)收集和使用个人信息的其他规则
1、若您提供的信息中含有其他用户的个人信息,在向我们提供这些个人信息之前,您需确保您已经取得合法的授权。
2、您理解并知悉,您向外部第三方(羽声语音直播关联公司不在此限)提供的个人信息,或外部第三方收集的您的个人信息,我们无法获取,更不会使用非常规方式(如:恶意干预对方系列APP数据)擅自以软件程序获得您的个人信息。羽声语音直播可能因业务发展的需要而确实需要从第三方间接收集(如共享等)您的个人信息的,且由我们直接或共同为您提供产品或服务的,我们会在收集前明确以书面形式要求该第三方说明其个人信息来源,以及是否已经就其收集、处理以及向我们提供您的个人信息取得了您的合法授权(如果使用方式和范围超出您在第三方原授权范围的,我们会再次征得您的授权同意)。我们的某些产品或服务由第三方业务合作伙伴提供或共同提供时,为了必要且合理的开展业务,我们可能会从部分业务合作伙伴处间接收集的您的部分信息、其他方使用我们的产品/服务时所提供有关您的信息。如果第三方的授权范围无法涵盖我们的处理和使用目的时,我们会自行或者要求该第三方征得您的同意后再行处理您的个人信息。
3、如果某一需要收集您的个人信息的产品/服务未能在本隐私政策中予以说明的,或者我们超出了与收集您的个人信息时所声称的目的及具有直接或合理关联范围的,我们将在收集和使用您的个人信息前,通过更新本隐私政策、页面提示、弹窗、站内信、网站公告或其他便于您获知的方式另行向您说明,并为您提供自主选择同意的方式,且在征得您明示同意后收集和使用。
4、征得授权同意的例外
您理解并同意,在以下情况下,我们无需取得您的授权同意即可收集和使用您的个人信息:
(1)与国家安全、国防安全有关的;
(2)与公共安全、公共卫生、重大公共利益有关的;
(3)与犯罪侦查、起诉、审判和判决执行等有关的;
(4)出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;
(5)所收集的个人信息是您自行向社会公众公开的;
(6)从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道,并依照《个人信息保护法》规定在合理的范围内处理您自行公开或者其他已经合法公开的个人信息;
(7)根据您的要求签订合同所必需的;
(8)用于维护所提供的产品或服务的安全稳定运行所必需的,例如发现、处置产品或服务的故障;
(9)为合法的新闻报道所必需的;
(10)学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的;
(11)法律法规规定的其他情形。
我们需要特别提醒您的是:由于我们的产品和服务较多,为您提供的内容也不同,因此收集的您的个人信息也会因产品/服务的内容不同而有所区别,具体以产品/服务实际提供为准。我们可能会不时推出新的或优化后的功能,或者依据最新法律法规要求,可能需要收集、使用您的新的个人信息或变更个人信息使用目的或方式。届时,我们将通过更新本政策、弹窗、页面提示等方式另行向您说明并为您提供自主选择同意的方式,且在征得您同意后再收集、使用。
三、我们如何使用Cookie和第三方H5页面
为使您获得更轻松的访问体验,您使用羽声语音直播产品或服务时,我们可能会通过采用各种技术收集和存储您访问羽声语音直播服务的相关数据,在您访问或再次访问羽声语音直播服务时,我们能识别您的身份,并通过分析数据为您提供更好更多的服务。包括使用小型数据文件识别您的身份,这么做是为了解您的使用习惯,帮您省去重复输入账户信息的步骤,或者帮助判断您的账户安全。这些数据文件可能是Cookie、Flash Cookie,或您的浏览器或关联应用程序提供的其他本地存储(统称“Cookie”)。
网页上常会包含一些电子图像,称为“单像素GIF文件”或“网络beacon”,它可以帮助网站计算浏览网页的用户或访问某些cookie。我们会通过网络beacon收集您浏览网页活动信息,例如您访问的页面地址、您先前访问的援引页面的位址、您停留在页面的时间、您的浏览环境以及显示设定等。
如果您的浏览器或浏览器附加服务允许,您可以修改对Cookie的接受程度或者拒绝羽声语音直播的Cookie(如:在浏览器具备该功能的前提下,可以通过您的浏览器的设置以管理、部分或全部拒绝Cookie与/或同类技术;或删除已经储存在您的计算机、移动设备或其他装置内的Cookie与/或同类技术,从而实现我们无法全部或部分追踪您的个人信息。您如需详细了解如何更改浏览器设置,请具体查看您使用的浏览器的相关设置页面),但拒绝羽声语音直播的Cookie可能无法使用由我们提供的、依赖于Cookie的功能或服务(如有)。
第三方H5页面。为了提升服务便捷性、方便用户快速触达第三方服务,我们可能会接入第三方的H5服务页面入口,如果您进入这些H5页面,该第三方可能会收集你的手机号、身份证件号、付款账号信息,请注意,您在以上第三方H5页面进行的各项操作请遵守该等第三方的隐私保护政策。当您离开我们平台跳转至第三方H5页面时,我们提醒您注意保护个人隐私。本平台不收集、不存储您在该类第三方服务页面填写和提交的任何个人信息。
四、我们如何共享、转让、公开披露您的个人信息
(一)共享
我们不会与西安熙晟文化传媒有限公司及关联方以外的任何公司、组织和个人分享您的个人信息,但以下情况除外:
1、获得您(及监护人)明确同意或授权的共享;
2、基于法定情形提供。根据法律法规的规定、诉讼争议解决需要、您与我们签署的相关协议(包括在线签署的电子协议及平台规则)或法律文件,或行政、司法等有权机关依法提出要求时,我们可能会共享您的个人信息;
3、提供统一管理服务。为便于您统一管理账号,体验更优质的服务,我们可能会向我们的关联公司共享您的个人信息。但我们只会共享必要的个人信息,如果我们共享您的个人敏感信息或者关联方改变个人信息的使用目的,将再次征求您的授权同意;
4、提供必要的合作服务并保证服务安全、优化。我们提供的产品/服务大多是无法单独完成的,故我们的某些服务将由业务合作伙伴提供。为保障为您提供的服务顺利完成,我们可能会将您的个人信息共享给我们的合作伙伴,包括基础技术服务、支付服务、营销活动等的合作商、第三方商家、广告商等;同时,为了向您提供更完善、优质、安全的产品和服务,我们的应用中会嵌入授权合作伙伴的软件工具开发包(本政策中简称“SDK”)或其他类似的应用程序,我们的某些服务将由授权合作伙伴提供或使用第三方SDK相关技术为您提供服务。基于此,我们会与合作伙伴共享您的某些个人信息,或者第三方SDK会通过SDK方式收集您的个人信息,具体包括:
(1)第三方账号登录、内容分享。QQ、微信、新浪微博会通过SDK方式收集您的位置信息、网络信息(包括Wi-Fi信息)、设备标识信息(MAC地址、IMEI、IMSI)、运营商信息、外部存储设备信息,用于实现第三方账号授权登录、共享发布的内容及评论等信息。
(2)安全监测与风险防范。为了保障您的账号安全,避免您遭受欺诈、网络病毒、网络攻击等风险,为我们提供安全保障的合作伙伴会通过SDK方式收集与您有关的必要设备信息、日志信息,以及您的使用习惯和常用软件信息等来综合判断您的账号及交易风险,预防安全事件的发生。
(3)支付与结算功能。支付功能由与我们合作的第三方支付机构向您提供服务,基于此,支付宝、微信、银联会通过SDK方式收集您的手机号、设备信息识别码(包括IMSI)、位置信息、网络信息(包括Wi-Fi信息)、当前运行进程/获取运行中进程信息、屏幕参数、运营商信息,保证充值、消费、支付功能的正常使用,这些信息是支付功能所必需的信息,拒绝提供将导致您无法使用该功能。当您提现收入(如有)时,为了您能及时完成收入的结算与提现、依据法律规定完成税费缴纳,将由与您另行单独确认的第三方服务方向您提供结算、税费扣缴服务,基于此,我们会向该类第三方服务方共享您提现时主动提供的收款账户信息以及身份信息,具体信息详见第二节第(七)款。
(4)人脸识别。阿里云、腾讯云、字节跳动会通过SDK方式收集您的证件信息、设备标识信息、网络信息(包括Wi-Fi信息)、设备传感器信息、屏幕参数、应用列表,该等第三方获取的面部特征信息用于人脸核验,我们只获得核验结果,不保存您的面部特征信息。
(5)直播视频服务。声网、会通过SDK收集您的共享Wi-Fi信息、设备标识信息、地理位置信息、运营商信息、外部存储设备、当前运行进程/获取运行中进程信息、屏幕参数,并共享用户授予的读取/写入外置存储、位置权限、获取设备信息、相机/摄像头权限、读取手机/电话状态,用于聊天室内和IM音视频通话,图片上传、直播推流和直播回放功能等相关功能。
目前,我们接入的第三方服务商主要包括以下几种类型:
用于消息推送功能,包括手机厂商Push推送、特定事件提醒;
用于支付相关服务,包括订单支付、交易行为核验、收入结算、支付信息汇总统计;
用于在您同意的情况下获取设备位置权限、搜集设备信息和日志信息;
用于第三方授权服务,包括第三方账号登陆、将有关内容分享至第三方产品;
用于优化产品性能,包括提高硬件配网能力、降低服务器成本、功能热修复;
用于账号安全、产品加固相关服务,包括网络监测、域名解析、防劫持、防黑产、反作弊、加解密服务。
我们接入的部分第三方SDK可能会收集您的个人信息,如您在我们的服务中使用这类由第三方提供的服务时,您同意将由其直接收集和处理您的信息。我们会评估这类第三方服务收集个人信息的合法性、正当性、必要性,要求该等第三方对您的个人信息采取保护措施,并严格遵守相关法律法规与监管要求。您可以查看下方《语音接入第三方SDK目录》,了解我们主要接入的第三方SDK基本情况。
羽声语音直播接入第三方SDK目录
1) 支付宝服务
类型:唤起支付宝app完成支付收集
所涉信息:设备MAC地址,网络访问,获取WiFi状态,读取电话状态,写入外部存储
隐私政策链接:https://opendocs.alipay.com/open/54/cyz7do
2)QQ开放平台SDK
服务类型:QQ分享
收集所涉信息:设备标识信息、定位信息、地理位置、ANDROID_ID、ICCID、IMEI
隐私政策链接:https://connect.qq.com/index.html
3)微信开放平台SDK
服务类型:微信分享/微信登录/微信支付/微信客服
收集所涉信息:设备标识信息、定位信息、地理位置、ANDROID_ID、ICCID、IMEI
隐私政策链接:https://open.weixin.qq.com/
8)声网SDK
服务类型:提供实时音频
服务收集所涉信息:设备MAC地址,IP地址,网络访问,WIFI状态访问,设备信息,文件存储权限,麦克风权限
隐私政策链接:https://www.agora.io/cn/interactive-live-streaming-premium
9)腾讯云IM SDK
服务类型:提供即时通信(私聊、群聊、房间内公屏聊天)
所涉信息:设备MAC地址,IP地址,网络状态,文件存储权限,麦克风权限,相机权限
隐私政策链接:https://cloud.tencent.com/document/product/269/58094
10)ShareSDK
1、服务类型:社会化分享收集
所涉信息:我们采集设备标识符(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)以及社交账号公开信息,以便向目标设备以及指定社交账号分享消息。采集地理位置甄别分享通道,提供反作弊服务。
2、服务类型:友盟统计需要收集您的设备Mac地址、唯一设备识别码(IMEI/android ID/IDFA/OPENUDID/GUID/IP地址/SIM 卡 IMSI 信息)以提供统计分析服务,并通过地理位置校准报表数据准确性,提供基础反作弊能力。
3、服务类型:友盟推送收集所涉信息:设备信息(如IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM卡 IMSI 信息)对用户进行唯一标识,以便进行消息推送。消息推送服务具备基础的反作弊功能,通过获取用户位置信息及IP地址,剔除作弊设备,甄别有效推送通道,提高消息推送的区域覆盖率,提高推送效果及报表数据准确性。
隐私政策链接:https://www.umeng.com/page/policy
11)腾讯Bugly
服务类型:定位反馈客户端异常、崩溃问题,更高效的修复解决异常收集所涉信息:日志信息(包括:第三方开发者自定义 日志、Logcat 日志以及 APP 崩溃堆栈信息)、设备 ID(包括:androidid 以及 idfv)、联网信息、系统名称、系统版本以及国家码
隐私政策链接:https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56
12)数美服务类型:用于风险控制和反欺诈、以保障账户和交易安全所涉信息:设备基本信息:设备品牌、设备制造商、设备型号、设备名称、设备系统类型及版本信息、设备基本配置、设备基本设置、设备环境、传感器信息(磁场、陀螺仪、加速度传感器)、SD卡信息,设备标识信息:AndroidID、IDFV(应用开发商标识符)、IDFA(广告标示符)、OAID(匿名设备标识符),设备网络信息:网络的接入形式、无线路由器标识(BSSID、SSID)及IP地址、周边WIFI列表、网络运营商信息、网络基站信息、网络连接状态;
隐私政策链接:https://www.ishumei.com/legal/cn/privacy.html;
14)阿里巴巴云计算
服务类型:实名认证
收集所涉信息:个人身份信息(真实姓名,身份证号),面部识别特征,读取短信, 联系,通话记录,位置信息,设备标识信息(IMEI、IMSI、AndroidID)
隐私政策链接:http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201902141711_54837.html
15)⾳视频通话 TRTC
服务类型:提供即时通信语音通话(私聊、群聊、房间内公屏聊天)
所涉信息:设备MAC地址,IP地址,网络状态,文件存储权限,麦克风权限,相机权限
隐私政策链接:https://cloud.tencent.com/document/product/269/58094
自启动和关联启动说明:
为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的广播信息,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现功能及服务所必要的。
请您知悉:(1)我们仅会出于合法、正当、必要、明确的目的共享您的个人信息,并且授权合作伙伴只能接触到其履行职责所需信息。同时,我们会与合作伙伴签署严格的保密协定,要求他们按照我们的说明、本政策以及其他任何相关的保密和安全措施来处理您的个人信息;(2)前述第三方合作伙伴为数据控制者,以其自己的名义获得您的同意以处理您的个人信息。合作方可能有其独立的隐私政策,我们建议您认真阅读并遵守第三方的隐私政策。如果您拒绝我们的合作方在提供服务时收集为提供服务所必需的个人信息,将可能导致您无法使用相应服务。
(二)转让
我们不会将您的个人隐私信息转让给任何公司组织和个人,但以下情况除外:
1、在获取明确同意的情况下共享:获得您的明确同意后,我们将与其分享您的个人隐私信息;
2、在涉及合并、收购、资产转让、破产清算时,你的个人信息有可能因此而被转移,如涉及个人隐私信息转让,我们将要求受让方继续受此政策约束并告知您受让方身份、联系方式,否则我们将要求受让方向您重新索取授权同意。
(三)公开披露
1、公开披露是指向社会或不特定人群发布信息的行为。我们仅在下列情形下,公开披露您的个人隐私信息:
(1)征得您明确的授权同意;
(2)基于国家法律法规的规定而对外披露;
(3)应国家司法机关及其他有关机关基于法定程序的要求而披露;
(4)为公共利益实施新闻报道、舆论监督等行为在合理的范围内公开的;
(5)为应对突发公共卫生事件,或在紧急情况下,为保护其他用户及第三方生命健康和财产安全而必须披露的,在该情况下我们将在紧急情况消除后及时告知您;
(6)应用户监护人合法要求而提供用户个人身份信息时;
(7)对违规账号、欺诈行为等进行处罚公告、公布中奖/获胜者等名单时脱敏展示相关信息等必要事宜而进行的必要披露。
2、对于公开披露的您的个人信息,我们会在收到公开披露申请后第一时间且审慎审查其正当性、合理性、合法性,并在公开披露时和公开披露后采取最严格个人信息安全保护措施和手段对其进行保护。
(四)共享、转让、公开披露个人信息时事先征得授权同意的例外
下述情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意:
1、与国家安全、国防安全直接相关的;
2、与公共安全、公共卫生、重大公共利益直接相关的;
3、与犯罪侦查、起诉、审判和判决执行等直接相关的;或根据法律法规的要求、行政机关或公检法等有权机关的要求的;
4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的;
5、个人信息是您自行向社会公开的或者是从合法公开的渠道(如合法的新闻报道、政府信息公开等渠道)中收集到的;
6、根据与您签订和履行相关协议或其他书面文件所必需的;
7、法律法规等规定的其他情形。
请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,则此类处理后数据的共享、转让、公开披露无需另行向您通知并征得您的同意。
五、我们如何存储和保护您的个人信息
(一)个人信息的存储
1、存储地点:我们会按照法律法规规定,将境内收集的用户个人信息存储于中华人民共和国境内。目前我们不会跨境传输或存储您的个人信息或向境外提供个人信息的场景。将来如需跨境传输或存储的,我们会单独向您明确告知信息出境的目的、接收方、使用方式和范围、安全保证措施等情况并征得您的同意。
2、存储期限:除非依据法律法规或双方约定,我们只会在为实现服务目的所必需的最短时间内留存您的个人信息,此外,我们或对您的相关信息保存至相关法律所规定的必要期限(例如,根据《电子商务法》规定:商品和服务信息、交易信息保存时间自交易完成之日起不少于三年;根据《网络安全法》规定:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;根据《互联网用户公众账号信息服务管理规定》:互联网用户公众账号信息服务提供者应当记录互联网用户公众账号信息服务使用者发布内容和日志信息,并按规定留存不少于六个月)。
我们在判断前述期限的标准主要包括并以其中较长者为准:
A. 完成与您相关的服务目的、维护相应服务及业务记录、应对您可能的查询或投诉;
B. 保证我们为您提供服务的安全和质量;
C. 您是否同意更长的留存期限;
D. 是否存在保留期限的其他特别约定。
在超出保存期限后,我们会根据适用法律的要求删除或者匿名化处理您的个人信息,但法律有特殊要求的除外。
当我们的产品或服务发生停止运营的情况时,我们将以推送通知、公告等形式通知您,并在合理期限内删除您的个人信息或进行匿名化处理,法律法规另有规定的除外。
(二)个人信息的保护措施
数据传输方面,采用传输层安全协议等密码技术,通过Https等方式防止传输链路被嗅探、窃听截取风险,建立安全的隐私数据采集环境,保证数据采集的私密性和完整性。
数据存储方面,我们会通过安全的方式存储您的信息,包括本地存储(例如利用APP进行数据缓存)。我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。您可以自主选择删除观看历史、视频缓存、搜索记录等您在使用羽声语音APP服务时提供和产生的数据记录。
信息安全方面,我们努力为您的信息安全提供保障,以防止信息的泄露、丢失、不当使用、未经授权访问和披露等。我们使用多方位的安全保护措施,以确保您的个人信息保护处于合理的安全水平,包括技术保护手段、管理制度控制、安全体系保障等诸多方面。
数据访问和使用的安全控制方面,实施严格的数据权限控制机制,采取多重身份认证技术,并对能够处理您的信息的行为进行监控,避免数据被违规访问和未授权使用。
建立完整的审计机制,对数据生命周期的全流程进行监控与审计,防止您的个人信息遭遇未经授权的访问、公开披露、使用、修改、人为或意外的损坏或丢失。
其他可行的安全组织和管理措施:
1、在我们从第三方间接收集您的个人信息前,我们会明确以书面形式(如合作协议、承诺书)要求该第三方在已经取得您明示同意后收集以及处理(如共享等)个人信息,在书面协议层面要求第三方对个人信息来源的合法性和合规性作出承诺,如第三方有违反行为的,我们会明确要求对方承担相应法律责任;
2、在我们向业务合作伙伴共享您的个人信息前,我们会严格要求合作伙伴的信息保护义务与责任,并要求业务合作伙伴在合作前需与羽声语音直播签署关于数据安全的保护协议,一旦业务合作伙伴有任何违反协议的行为,将须承担相应法律责任;
3、我们建立了合理有效、科学健全的安全应急响应体系,明确了网络安全事件的分类分级标准、安全应急响应组织及职责,并根据安全事件的不同类型和级别制定了适当的应急响应预案,明确规范了安全事件的报告流程和应急响应处置流程。同时,我们还具备“羽声语音直播”安全应急响应中心,由专业的安全技术和运营团队负责维护,便于及时有效的响应、处置各类安全漏洞和突发事件,联合相关部门进行安全事件溯源和打击;
4、如不幸发生个人信息安全事件的,我们将按照法律法规的要求,及时向您告知安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。
5、请您知悉并理解,互联网并非绝对安全的环境,我们强烈建议通过安全方式、使用复杂密码,协助我们保证您的账号安全。如发现自己的个人信息泄密,尤其是您自己的账户或密码发生泄露,请立即根据本政策文末中提供的联系方式联络我们,以便我们采取相应措施来保护您的个人信息安全。
六、您如何管理您的个人信息
您对您的个人信息享有以下权利:
(一)访问权
1、账号信息:您可以通过相关产品页面随时登陆您的个人账号,随时查询或访问您的账号中个人资料信息,包括:头像、昵称、星座、城市等。例如:“头像/昵称”信息在羽声语音直播APP中的访问路径为:我的—头像栏;在羽声语音直播微信小程序的访问路径为:我的->点击个人头像->点击头像右下角编辑icon可进入资料编辑页面。
2、使用信息:您可以通过相关产品页面随时查阅您的使用信息,包括:订单记录、浏览记录、动态记录等。例如:“浏览记录”信息在羽声语音直播APP和微信小程序中的访问路径为:我的—足迹;
3、财产信息:您可以通过羽声语音直播APP 我的-钱包,以及羽声语音直播微信公众号-钱包查阅;
4、其他信息:您也可以在【我的】-【帮助与反馈】-【个人信息收集清单】中集中查询您的网络身份标识和鉴权信息、身份信息、用户基本资料、个人财产信息、用户使用过程信息、设备信息、内容制作与发布。如您在访问过程中遇到操作问题或如需获取其他前述方法无法获知的个人信息内容,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,但法律法规另有规定或本政策另有约定的除外。
我们会按照如下规则进行个性化推荐或定向推送,并为您提供相应的退出机制:
我们会根据您的喜欢为您提供个性化的推广内容,
例如在主页推荐房间、派对 - 推荐;您可以通过“我的-设置-个性化推荐”-关闭。关闭后,您看到的相关内容以房间活跃值默认展示。
(二)复制权
若您需要复制我们收集的关于你本人的基本资料、身份信息的,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,或在技术可行的前提下根据您的请求将您的个人信息转移至指定的个人信息处理者,但法律法规另有规定或本政策另有约定的除外。
(三)更正/修改权
若您发现您提供给我们的个人信息存在登记错误、不完整或有更新的,您可在我们产品和/或服务中更正/修改您的相关个人信息。
1、对于您的部分个人信息,您可以按照相关功能页面的指引和设置在线进行更正/修改。例如“头像/昵称”信息更正/修改路径为:我的—头像栏—编辑资料;
2、对于您在行使上述权利过程中遇到的困难,或者其他可能目前无法向您提供在线自行更正/修改服务的,经过对您身份的验证,且更正/修改不影响信息的客观性和准确性的情况下,您有权对错误或不完整的信息作出更正或修改,或在特定情况下,尤其是数据错误时,通过我们公布的反馈与报错等措施将您的更正/修改申请提交给我们,或联系我们(联系方式:详见下文第九节),要求我们更正或修改您的数据,但法律法规另有规定的除外。但出于安全性和身份识别的考虑,您可能无法修改注册时提交的某些初始注册信息。
(四)删除权
1、对于您提供的部分个人信息,您可以自行通过我们提供的相关产品和服务的功能页面,主动删除您提供信息。例如:“头像/昵称”信息在羽声语音APP中的删除路径为:【我的-个人主页-资料】。您也可以自主删除您发布的视频、动态、图片等。一旦您删除后,我们即会对此类信息进行删除或匿名化处理,法律法规另有规定的除外。
2、在以下情形中,您可以通过本政策第九节提供的联系方式向我们提出删除个人信息的请求,但已做匿名化处理或法律法规另有规定的除外:
(1)如果我们处理个人信息的行为违反法律法规;
(2)如果我们收集、使用您的个人信息,却未征得您的明确同意;
(3)如果我们处理个人信息的行为严重违反了该政策;
(4)如果您主动注销了账号;
(5)当我们终止服务及运营时。
(五)撤回同意权
1、我们提供的产品或服务的部分功能需要获得您使用设备的相关权限(包括:位置、相机、麦克风等,详见本隐私政策第二节第(十二)条“我们获取的设备权限”,具体以产品实际获取的功能为准)。您可以在授权后随时撤回(或停止)对该权限的继续授权,包括通过您设备中的设置页面或羽声语音APP的相关路径(“我的-设置-隐私-隐私权限设置”)撤回相关授权。示例路径如下:
(1)位置的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问位置信息】撤回同意;
(2)相机的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意;
(3)麦克风的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意;
(4)日历的权限:您可通过【我的-系统设置-系统权限管理】撤回同意。
2、就我们通过短信的方式向您发送的商业性服务信息,如果您不想收到此类信息,您可以通过联系我们(联系方式:详见下文第九节),或者通过编辑“T”或“TD”并回复短信进行退订,提请注意:我们不会就您申请退订额外收取任何费用,但可能会发生一定的通信或者网络费用,具体以通信运营商与您约定为准,退订成功后我们将不再向您发送此类型的短信。就我们通过您设备的系统通知向你推送的内容,如果您不想收到此类信息,你可选择在设备中关闭羽声语音直播的通知功能。
3、对于合作方使用或我们转让、公开披露您的个人信息,您可以通过我们的相关功能页面或联系我们、合作方,撤回您的授权,但法律法规另有规定或本隐私政策另有约定的除外。
4、您可以通过卸载羽声语音App的方式撤回我们通过当前设备对您的个人信息的收集能力。
5、当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。当您更新APP版本后,未经您的明确同意,我们不会更改您之前设置的权限状态。
6、对于您无法直接通过上述路径改变授权同意或撤回同意的,您均可通过本政策第九节提供的方式联系我们进行处理,但法律法规另有规定或本政策另有约定的除外。
(六)注销权
我们向您提供账户注销的途径。在您符合国家相关法律法规规定及约定注销条件的情况下,可以通过本隐私政策预留的联系方式(详见下文第九节)或在线申请注销您的账户。
提请注意:当您注销账号后,您将无法再以该账号登录和使用我们的产品与服务;且该账号在羽声语音及旗下的其他产品与服务使用期间已产生的但未消耗完毕的权益及未来的预期利益等全部权益将被清除;该账号下的内容、信息、数据、记录等将会被删除或匿名化处理(但法律法规另有规定或监管部门另有要求的除外,如依据《中华人民共和国网络安全法》规定,您的网络操作日志将至少保留六个月的时间);羽声语音账号注销完成后,将无法恢复。更多关于羽声语音账号注销的流程、条件等事项请详见《帐号注销须知》。
如您在谨慎考虑后仍执意决定注销您的羽声语音直播账号的,您可以在您使用的我们的产品/服务的相关功能设置页面或根据操作指引向我们提交注销申请,羽声语音APP的在线申请注销路径为:【我的】-【设置】-【账号与安全】-【安全中心】-【注销账号】;羽声语音直播微信小程序可以选择通过上述羽声语音APP注销路径、联系客服或者通过本隐私政策第九节预留的联系方式申请注销。
在您主动注销账户之后,我们将停止为您提供产品或服务,根据适用法律的要求删除您的个人信息,或使其匿名化处理。
(七)约束信息系统自动决策
在某些业务功能中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权通过本政策第九节提供的联系方式要求我们做出解释并拒绝我们仅通过自动化决策的方式作出决定,我们也将在不侵害羽声语音直播商业秘密或其他用户权益、社会公共利益、国家利益的前提下做出合理解释、处理。
(八)我们对去世用户的个人信息保护
1. 羽声语音直播将根据《个人信息保护法》的相关规定保护死者个人信息。羽声语音用户(仅限自然人)去世后,其近亲属为了自身的合法、正当利益,可以通过本隐私政策第九节“联系我们”中公示的联系方式,对去世用户的相关个人信息行使查阅、复制、更正、删除等权利,但是去世用户生前另有安排的除外。
2. 您理解并确认,为了充分保护去世用户的个人信息权益,申请行使本条权利的去世用户近亲属需要根据羽声语音直播的指定流程或客服提示,提交去世用户的身份证明文件、死亡证明文件、申请人的身份证明文件、申请人与去世用户的亲属关系证明文件,并提供申请行使的权利种类、目的。更多关于去世用户的个人信息保护流程、条件等事项请联系在线客服。
(九)响应您的上述请求
如果您在行使上述权利、处置您的个人信息时有任何疑问,您均可以通过本隐私政策第九节中公示的联系方式与我们沟通解决。
为保障安全,当您提出前述请求时,您需要提供上述要求材料,或以其他方式证明您的身份,再处理您的请求,若您拒绝提供相应证明材料,我们将无法响应您的请求。我们将在15日内做出答复。在以下情形中,按照法律法规要求,我们将无法响应您的请求:
1、与国家安全、国防安全、国家利益有关的;
2、与公共安全、公共卫生、重大公共利益有关的;
3、与犯罪刑事侦查、起诉、立案、审判和执行判决等有关的;
4、有充分证据表明个人信息主体存在主观恶意串通妨碍第三人行使合法权益或滥用权利使其他个人、组织的合法权益受到严重损害的;
5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;
6、涉及商业秘密的。
七、未成年人保护
我们的产品、网站和服务主要面向成年人。您知悉,羽声语音直播将依赖用户提供的个人信息判断用户是否为未成年人。若您是未成年人,建议您及您的监护人仔细阅读本政策,并在征得您的监护人同意的前提下使用我们的产品或服务或向我们提供信息。对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况,我们只会在法律法规允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。
特别地,若您是14周岁以下的儿童,将适用《羽声语音儿童个人信息保护规则》,建议您及您的监护人仔细阅读《羽声语音儿童个人信息保护规则》,并在征得您的监护同意的前提下使用我们的产品或服务。
若您是未成年人的监护人,一旦发现未成年人虚报年龄注册账号的,可通过本政策第九节所述方式向我们提出中止/终止该未成年人的账号或者要求向该未成年人提供青少年保护服务模式下的产品与/或服务。为了验证请求方为未成年人的监护人,特别是当您作为监护人提出资金类申请时,我们可能需要您向我们提供被监护人以及监护人的身份证(正面及反面)复印件/扫描件一份、可证明法定监护关系的有效法律文件(如出生证明、户口本)以及监护人手机号码、收款账号信息(如需),以保障用户的账号与资金安全。我们在收到您的上述文件后,会及时审核其真实性和有效性,并请确保监护人的手机畅通,以便我们的专业客服联系您进一步核实身份(如需)。同时,我们将依法记录、保存验证身份信息及验证结果,这些信息仅供完成验证、争议解决服务之目的,或者其他法律法规所规定的用途,我们向您承诺,我们会以最大努力保障您的个人信息安全,未经您明示授权不会用作其他目的。以上信息包含您及您所监护的未成年人的个人敏感信息,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。
若您是未成年人的监护人,当您对您所监护的未成年人的个人信息保护有任何相关疑问时,请通过第九节“联系我们”中公示的联系方式与我们联系。
八、本政策的更新
为保证您能够获得更好的服务并应平台业务调整以及未来发展,本政策也会与时俱进随之更新。但在更新的同时,我们会以单独、明显的方式获取您的授权。
我们在应用程序、官方网站更新版本后或官方发出公告后以合理、适当、明显的方式提醒您相关内容的更新,以便您能更快了解您权利的更迭。
对于重大变更,我们还会提供更为显著的通知方式(我们会通过包括但不限于邮件、短信、公告、首页或在浏览页面做特别提示等方式,来向您表达政策的更新内容)。
本政策所指的重大变更包括但不限于:
(一)我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等;
(二)我们在所有权结构、组织架构等方面发生重大变化。如业务调整、破产并购等引起的所有者变更等;
(三)个人信息共享、转让或公开披露的主要对象发生变化;
(四)您参与个人信息处理方面的权利及其行使方式发生重大变化。
九、联系我们
如您对本政策(或您个人信息的相关事宜)有投诉、举报、意见或建议的,可以通过如下方式与我们(西安熙晟文化传媒有限公司)联系,我们将在15天内予以您答复:
1、羽声语音站内客服:【我的】-【在线客服】-输入“人工客服”进行咨询;
2、人工客服电话:17531991222
3、个人信息保护负责人电话:17531991222
4、我们还设立了个人信息保护专职部门,您可以写信至:陕西省西安市高新区天谷八路156号软件新城云汇谷A6西户2层201-2-275 法务合规部(收);邮编710000
十、其他
本政策的解释、执行及争议解决均适用中华人民共和国法律(不包括冲突法)。因本政策产生争议的,双方应首先友好协商,协商不成的,您同意通过被告所在地有管辖权的法院提起诉讼来寻求解决方案。
\ No newline at end of file + + + + + + +
羽声语音直播隐私保护政策
+本版本更新日期:2025年【10】月【27】日
+本版本生效日期:2025年【10】月【27】日
+引言:
+“羽声语音”APP 的运营主体系陕西启星汇申网络科技有限公司(以下简称“我们”& + ”羽声”)深知个人信息对您的重要性,并会尽力保护您的个人信息安全可靠,我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则,目的明确原则,选择同意原则,最少够用原则,确保安全原则,主体参与原则,公开透明原则等。同时我们承诺,我们将按业界成熟的安全解决方案,采取相应的安全保护措施来保护您的个人信息。鉴此,我们制定本《隐私政策》(下称“本政策 + / 本隐私政策”)并提醒您: 本政策适用于羽声语音语音软件及相关服务。 + 需要特别说明的是,本政策不适用于其他第三方向您提供的服务,也不适用于已另行独立设置隐私权政策的产品或服务。 + 在使用羽声语音语音软件或服务前,请您务必仔细阅读并透彻理解本政策,特别是以粗体/粗体下划线标识的条款,您应重点阅读,在确认充分理解并同意后使用相关产品或服务。若您拒绝本政策,仅能进入访客态进行浏览。为保障软件及服务的安全运行,呱友在相应功能点触发时会收集相关设备信息及权限。如对本政策内容有任何疑问、意见或建议,您可通过呱友提供的各种联系方式与我们联系。 + 我们非常重视用户个人信息的保护,并且将以勤勉和审慎的义务对待这些信息。您在下载、安装、开启、浏览、注册、登录、使用(以下统称“使用”)本公司软件及相关服务时,本公司将按照本《隐私政策》收集、保存、使用、共享、披露及保护您的个人信息鉴此,我们希望通过本《隐私政策》向您介绍我们对您个人信息的处理方式并提醒您: + 在使用“羽声”各项产品或服务前,请您留意重点阅读。若您认为本协议中的加粗条款可能会导致您的部分或全部权利或权益受损,请您务必再次仔细阅读,在确保您已经理解、接受了加粗条款的前提下,继续使用本公司服务。如对本政策内容有任何疑问、意见或建议,您可通过提供的各种联系方式与我们联系。 +
+本政策将帮助您了解如下内容:
+一、定义及适用范围
+二、我们如何收集和使用您的个人信息
+三、我们如何使用Cookie和第三方H5页面
+四、我们如何共享、转让、公开披露您的个人信息
+五、我们如何存储和保护您的个人信息
+六、您如何管理您的个人信息
+七、未成年人保护
+八、本政策的更新
+九、联系我们
+十、其他
+【特别提示】请您在使用我们各项产品或服务前,仔细阅读并透彻理解本政策,特别是以粗体/下划线/粗体下划线等有特殊标识的条款,您应重点阅读,在确认充分理解并同意后使用相关产品或服务。如果您不同意我们收集您的任何个人信息,您应当立即停止使用并退出羽声语音直播。当您使用或继续使用我们的产品或服务时,即表示您同意我们按照本政策来处理您的相关信息。 +
++ 如对本政策内容有任何疑问,您可以通过本政策中“联系我们”一节提供的联系方式与我们联系。 +
+一、定义及适用范围
+(一)定义
+1、羽声语音软件及相关服务:指由陕西启星汇申网络科技有限公司陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层 + 及其关联方通过合法拥有并运营的、标注名称为羽声语音、羽声语音极速版的客户端应用程序、APP、微信小程序、微信公众号、羽声语音官方网站( https://golden-llama-1g494r.mysxl.cn/ + )、通过APK、SDK、API等方式向您提供的软件和/或服务及随技术发展出现的新形态向您提供的产品与服务。 +
+2、关联方:指在现在、将来控制陕西启星汇申网络科技有限公司、受陕西启星汇申网络科技有限公司控制或与陕西启星汇申网络科技有限公司处于共同控制下的公司、机构。
+3、未成年人:指不满十八周岁的自然人。十六周岁以上的未成年人,以自己的劳动收入为主要生活来源的,视为完全民事行为能力人。 +
+4、儿童:指不满十四周岁的未成年人。 +
+(二)适用范围
++ 本政策适用于羽声语音的产品或服务。如我们关联公司的产品或服务中使用了羽声语音直播提供的产品或服务,则本政策同样适用于该部分产品或服务。但请您注意,本政策不适用于以下情况: +
+1、为我们的产品或服务提供广告服务的第三方的信息收集/处理做法; +
+2、我们的产品或服务可能会包含或链接至第三方提供的信息与/或第三方服务(包括任何第三方应用、网站、产品、服务等),这些信息与/或服务由第三方负责运营,具体规则请参照该第三方的隐私政策或类似声明; +
+3、其他非羽声语音向您提供的产品与/或服务内容。
+二、我们如何收集和使用您的个人信息
+我们收集和使用的您的个人信息类型包括两种:第一种:我们产品与/或服务的基本业务功能所必需的信息:此类信息为产品与/或服务正常运行的必备信息,您须授权我们收集。如您拒绝提供,您将无法正常使用我们的产品与/或服务;第二种:拓展业务功能可能需要收集的信息:此信息为非基本业务功能所需的信息,您可以选择是否授权我们收集。如您拒绝提供,将导致拓展业务功能无法实现或无法达到我们拟达到的效果,但不影响您对基本业务功能的正常使用。 +
+我们在此特别提醒您:我们致力于打造多样的产品和服务以满足您的需求。因我们向您提供的产品和服务种类众多,且不同用户选择使用的具体产品/服务范围存在差异,故基本/拓展功能及对应收集使用的个人信息类型、范围等会有所区别,请以具体的产品/服务功能为准。 +
+我们收集和使用您的个人信息的场景有:
+(一)注册成为我们的用户
+当您在羽声语音直播上创建羽声语音直播账号时,您需要提供您本人的实名手机号码、验证码并完善相关的网络身份识别信息(包括头像、昵称、登录密码、性别、生日)。您需理解,手机号码、验证码匹配结果、性别、生日均属于您的敏感个人信息,我们收集您的手机号码、验证码是基于法律法规的相关要求。其中:(1)实名手机号码、验证码是为了验证您的身份,满足相关法律规定的网络实名制要求;(2)生日是为了协助判断您是否为年满十八周岁的成年人,若您是未成年人,我们将不对您提供服务,请您谅解,也提请您按真实情况填写相应信息,切勿虚构、假冒;(3)性别是为了向您提供性别匹配服务。上述敏感个人信息,您有权拒绝提供,但将无法使用相关功能或服务,请您谨慎考虑后再选择是否提供。 +
+在您注册账号后,您可以根据自身需求选择填写学校、个性签名、家乡、兴趣爱好等个人主页信息,来帮助您更加形象的展示自我。但如果您不提供这些信息,将不会影响本服务的基本业务功能。您在个人主页发布的上述信息、动态、添加的兴趣标签、游戏名片,以及你的账号等级、ID号、获赞数、粉丝数,将会在账号(包括APP和微信小程序)的个人主页中公开展示,您也可以通过APP设置-隐私进行信息隐藏(不对未关注用户显示可见)或通过第六节所述管理您的个人信息。 +
+(二)进行实名认证
+1、为满足相关法律规定及监管要求、确保用户身份真实性、实现反欺诈等风控、保障系统与服务安全(包括依法保护未成年人合法权益、用户权益发放、打击电信网络诈骗等需要),当您使用羽声语音直播中某些特定类型的产品与/或服务,您需要向平台提供您本人的真实姓名及身份证号码信息(敏感个人信息),并可能需要通过您的人脸信息(敏感个人信息)进行身份一致性核验:
+(1)在您进行实名认证时,若您选择或产品页面进入火山引擎、腾讯云等第三方的实名认证程序(人脸识别功能),我们及/或第三方会申请、调用终端设备的摄像头权限来采集您的面部识别信息,在您授权后,前述第三方实名认证程序将通过SDK方式获取您的如下敏感个人信息:姓名、身份证件号码、人脸信息(指为验证或识别您的身份而采集的人脸图像、视频,以及基于上述图像、视频提取的面部识别特征),为了准确验证您的身份,第三方需将上述信息与其合法存有的(如基于法律法规或政府部门、有权机关授权或存储)您的个人信息进行比对核验。为了验证实名认证结果的有效性,并及时解决用户就实名认证结果的争议或投诉,您通过以上方式实名认证的,第三方会向我们返回人脸识别验证结果以及为验证或识别您的身份而采集的部分人脸图像、视频(具体以第三方提供为准,此为您的敏感个人信息),除此外,我们会存储您在上述实名认证过程中主动填写的姓名、身份证号码(敏感个人信息)。 +
+当您通过本平台主动选择进行真人头像认证时,经您同意后,我们会收集您上传的头像照片,为了验证您上传的头像照片为您本人,不存在冒用或盗用他人照片、头像的情形,我们将请求您按上述方式通过第三方人脸识别程序完成实名认证,经第三方反馈验证一致的,您上传的头像照片将作为您在羽声语音直播APP内的头像进行公开,具体规则请见《真人头像认证协议》。因此,我们在此提醒您谨慎使用真人头像认证功能,您有权拒绝,且您拒绝不影响您继续使用本平台的基本业务功能。 +
++ 具体使用的第三方人脸识别程序可通过第四节第(一)条所列《羽声语音直播与第三方共享个人信息清单》查阅。 +
+(2)若您无法通过上述程序完成实名认证,您可以选择通过人工认证方式完成实名认证程序,为了完成实名认证服务,我们将依据相关法律法规获取并存储您的个人身份信息,包括如下:姓名(敏感个人信息)、身份证件类型(包括但不限于相应的身份证、护照、台湾居民来往大陆通行证、港澳居民往来内地通行证等)和相应的证件正反面图片(敏感个人信息)、您手持相应身份证件的照片(敏感个人信息)。 +
+提请您特别注意,您的身份证件信息、您手持身份证件的照片、真人照片、人脸信息均属于敏感个人信息,您可以拒绝提供,如果拒绝提供您将可能无法获得需要实名认证的特定服务,但不影响您正常使用产品的基本业务功能(包括产品的浏览和观看功能);同时,我们将依法记录、保存验证身份信息及验证结果,这些信息仅供完成验证目的,或者其他法律法规所规定的用途,未经您明示授权不会用作其他目的。 +
+2、具体实名场景及对应服务主要包括(具体以您使用的功能为准):
+(1)当您申请注册为互联网发布者(主播)、开设个人房时,需要提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并通过您的面部识别信息(敏感个人信息)进行身份一致性核验。通过验证后,您方可在平台上从事直播发布活动。如果您拒绝提供上述信息(您有权拒绝),您将可能无法获得相关服务(开播或开设个人房间),但不影响您正常使用产品的浏览和观看功能。 +
+(2)当您通过羽声语音直播进行充值、消费时(特别是当您使用下单功能时),为了保证您的资金安全,避免未成年人使用下单功能,我们可能需要您提供您的真实姓名、身份证件信息(敏感个人信息)进行实名身份认证,并可能需要您通过您的面部识别信息(敏感个人信息)进行身份一致性核验。前述信息您可以拒绝提供,您拒绝提供前述信息的,只会使您无法使用羽声语音直播对应功能,但不影响您使用其他功能。
+(3)当您使用提现功能,我们会需要您绑定银行卡账号信息、支付宝账号、身份证号码、姓名(敏感个人信息)进行实名认证。在您授权后,我们可能需要通过您的面部识别信息(敏感个人信息)进行身份一致性核验。您可以拒绝提供前述信息,但您拒绝提供将导致您无法使用对应功能,但不影响您使用羽声语音直播的其他功能。
+(4)在账号冻结、封禁申诉时,为了核实争议账号是您本人持有,平台还将使用您注册时使用的实名手机号码、身份证件信息(敏感个人信息)进行身份核实认证。
+(5)基于依法保护未成年人权益的需求,我们为未成年人提供了青少年模式,若您拟解除、退出青少年模式,我们会需要您提供真实姓名、身份证件信息(敏感个人信息),并在您授权后,我们可能需要通过您的面部识别信息进行身份一致性核验。如果您拒绝提供前述信息,您将无法退出青少年模式,但不影响您在青少年模式下使用羽声语音直播产品和服务。
+(三)为您提供服务内容的浏览/播放/搜索/下载
+1、当您进行直播间、聊天室、视频、音频等服务内容的浏览、播放、下载功能时,为与您的移动设备进行必要的适配,向您提供连续性、一致化的使用体验以及最优化的页面展示,我们需要收集您的设备信息、个人上网记录。 +
+设备信息包括:浏览器类型、设备型号、操作系统版本、设备设置、DEVICEID、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID、UDID、UUID、MEID及其他设备标识符、设备环境。 +
+个人上网记录包括:浏览/点击/播放记录、收藏/关注/预约记录、点赞/分享/发布记录等。
+我们收集这些信息是为了向您提供直播间、视频、音频等内容的浏览、播放和展示服务,如您拒绝提供上述权限将可能导致您无法使用我们的相关产品与服务。请您理解,单独的设备信息、日志信息是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。 +
+2、当您使用我们提供的搜索功能时,我们还会收集您搜索的关键字信息、设备信息(包括设备型号、操作系统版本、设备设置、AndroidID、MAC地址、IMEI、IDFA、OAID、ICCID等设备标识符、设备环境)、日志信息(包括您的浏览记录和时间、您搜索的时间以及次数)。我们收集这些信息是为了方便您后续查找时无需再次输入,并向您快速匹配您所需要的内容以及您可能感兴趣的内容,为了提供高效的搜索服务,部分前述信息会暂时存储在您的本地存储设备之中,并可向您展示搜索结果内容、搜索历史记录。您可以自主删除前述搜索记录。搜索的关键词信息通常无法单独识别您的个人身份,不属于您的个人信息,不在本政策的限制范围内。但当您的搜索关键词信息与您的其他信息有联结并可识别您的个人身份时,在结合使用期间,我们会将您的搜索关键词信息作为您的个人信息,与您的搜索历史记录一同按照本政策对其进行处理与保护。 +
+当您分享/接收被分享的信息时,我们会在您进入羽声语音直播时访问您的剪切板,写入或读取其中包含的文字、链接、口令、分享码,以实现分享、跳转功能。我们不会收集、存储剪切板的其他信息。 +
+3、当您使用下载功能时,经您同意后,我们会访问您的存储权限,以便在您设备外置存储空间内写入相关文件。如您拒绝提供,仅会使您无法使用该功能,但并不影响您正常使用产品或服务的其他功能。同时,您也可以随时通过您设备的相关功能设置开启/取消该权限。 +
+(五)帮助您上传或发布图文、音频和视频 +
+1、若您通过羽声语音直播的社区功能或通过羽声语音直播的评论、分享、发帖、发布动态等功能上传/发布/编辑图文、音频、视频时,当您使用到具体功能时,我们将向您分别单独请求访问您设备的相机/摄像头权限、相册权限(IOS端)/存储权限(安卓端)、录音/麦克风权限:(1)经您同意授权相机/摄像头权限后,我们会访问您的相应权限,以便您拍摄照片、视频,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息;(2)经您同意授权相册权限(IOS端)/存储权限(安卓端)后,我们会访问您的相应权限,以便您查看、选择相册里的图片/视频发布动态、反馈意见,设置与更换头像、封面,聊天时分享图片/视频,以及保存图片/视频至相册,您还可以在其他场景访问设备里的照片、音频和视频,以及保存内容到设备;(3)经您同意授权录音/麦克风权限后,我们会访问您的相应权限,以便识别您上传的语音信息,并采集、识别上述功能实现过程中所录制、输入的音频信息。如您拒绝提供上述权限的仅会使您无法使用该功能,但并不影响您正常使用产品/服务的其他功能,同时,您也可以随时通过您的设备系统或使用我们的产品/服务的相关功能设置页面开启/取消该权限。 +
+2、如您自愿填写信息或自愿发布内容的,我们会收集您上传的视频、照片、音视频、帖子、评论、点赞、关注、分享信息、浏览及搜索信息。您可随时删除您发布的照片、音视频、帖子及评论内容。为了验证您发布内容的合法合规性,避免您发布的内容涉及违法或侵犯第三方合法权益的情形。您同意我们为了上述目的将您发布的图文、音频、视频内容提供给我们的服务提供商,并由我们的服务提供商对上述内容进行审核、标注后向我们反馈结果。我们不会向上述服务商传输或共享您的个人信息,我们仅会对您发布内容的合法合规性进行审核。 +
+3、当您使用设备相机扫描二维码时,我们将访问您设备的相机/摄像头权限。如您拒绝提供的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备的设置开启/取消该权限。 +
+4、您在使用动态发布等功能时发布的公开信息可能涉及您或他人的个人信息或个人隐私信息,如您在分享、评论时选择上传的包括个人信息的图片或视频。您应更为谨慎考虑是否公开该等信息,以及获得合法权利人授权后再行发布,同时如该等信息中涉及未成年人个人信息的,您应在发布前征得其监护人同意。 +
+(六)录制音视频及提供直播功能
+当您使用录制音视频、使用个人房间服务以及直播服务时,经您分别授权我们将访问您设备的相机/摄像头权限(当您同意开启此项权限后,我们会使用您设备上的相机拍摄功能。此项功能将用于实现照片拍摄、录制视频功能,并采集、识别上述功能实现过程中所拍摄或录制的图片及视频信息)、录音(麦克风)相关权限(当您同意开启此项权限后,我们会使用您设备上的麦克风功能,并会识别您上传的语音信息。此项权限将用于实现语音输入功能,并采集、识别上述功能实现过程中所输入的语音信息),如您拒绝授权的仅会使您无法使用该功能,但并不影响您正常使用产品与/或服务的其他功能。同时,您也可以随时通过您的设备设置开启/取消该权限。此外,为保证您使用直播或聊天室功能时的流畅度、节省您的流量,我们会收集您使用该功能时段内使用流量的大小。 +
+(七)消费与提现
+当您通过羽声语音购买商品和/或服务时(如SVIP会员购买、购买虚拟商品、个性装扮、礼物),为帮助您完成交易、保障交易安全、提供订单查询、客服及售后服务,我们需要根据商品的类型收集如下部分或全部的订单信息:下单时间、订单编号、订单状态、交易的商品信息、支付信息(支付金额、支付方式、支付流水号、支付状态、第三方支付渠道的支付账号,敏感个人信息)、虚拟商品消费使用记录、会员开通时间。为此,为保障您的账户和资金安全以及支付服务的安全稳定运行、履行反电信网络诈骗等法定义务,我们还会收集您必要的设备信息(IP地址)并提供给您选择的第三方支付渠道。为向您提供售后与争议解决服务之目的,我们需要及时获悉并确认交付、售后的进度及状态,您同意我们可自相应第三方处收集与交付、售后进度相关的信息。我们向您承诺,我们会以最大努力保障您的个人信息安全,并严格要求第三方对您的个人信息保密,只以交付、售后之目的获悉和使用,不得对外泄露或做其他任何用途。您可以拒绝提供前述信息,但您拒绝提供将导致您无法使用对应功能,但不影响您使用羽声语音直播的基本业务功能。
+当您使用提现功能时,为了完成支付结算,我们会收集、使用您主动填写的收款账户信息(银行卡账号信息及开户行信息、支付宝账号及/或微信账号,具体以您填写为准)以及身份证号码、姓名,并会共享给第三方支付结算机构(请见第四节第(一)项)。前述信息为敏感个人信息,您可以拒绝提供,您拒绝提供将导致您无法使用对应提现功能,但不影响您使用羽声语音直播的其他功能。 +
+(八)客户服务
+当您主动填写羽声语音APP上的反馈意见(如帮助与反馈-意见反馈页面)、举报投诉页面时,我们会收集您主动填写的手机号、反馈/举报投诉内容(请谨慎考虑后再决定是否填写),我们收集信息仅用于收集您的意见,便于与您联系、尽快帮助您解决问题。 +
+当您向我们发起投诉、申诉或进行咨询时,为了保障您的账户及系统安全,我们需要您提供必要的个人信息(包括账号信息、姓名、手机号、身份证以及其他必要身份信息)以核验您的用户身份。为便于与您联系、尽快帮助您解决问题或记录相关问题的处理方案及结果,我们可能会收集您与我们的沟通信息(包括文字/图片/音视频/通话记录形式)、您为了证明相关事实提供的信息、与客服需求相关联的其他必要信息。如您针对具体的订单发起客服需求的,我们还会使用您的订单信息。 +
+以上信息为您的个人敏感信息,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。 +
+(九)为您提供安全保障服务
+为了使羽声语音直播产品及服务与您的移动设备进行必要的适配,提高您使用我们及我们合作伙伴提供服务的安全性,保护您或其他用户或公众的人身财产安全免受侵害,更好的预防钓鱼网站、欺诈、网络漏洞、计算机病毒、网络攻击、网络入侵等安全风险,分析当前设备的风险等级,有效识别各种作弊行为、风险设备、恶意刷量、恶意程序、保护您的账号安全,我们会收集为实现安全保障功能的必要信息,我们会获取您的以下信息: +
+1、网络访问日志信息和用户日志信息。包括:网络信息(如网络类型)、运营商信息(如SIM卡信息)、账号信息(如账号登录地)以及使用“羽声语音直播”产品或服务的频率、崩溃数据、总体安装、使用情况、性能数据、服务故障等信息。 +
+2、您的设备信息。包括:设备型号、操作系统、设备序列号/SN、设备标识符(如IMEI/IMSI/Android + ID/IDFA/OpenUDID/GUID/ICCID/ + UUID/MEID/DEVICEID)、设备MAC地址、应用列表、登陆IP地址、软件版本号、接入网络的方式、类型和状态、设备当前运行进程/运行中进程信息、设备传感器信息、蓝牙信息屏幕尺寸等参数信息,同时为了保证您的账号安全,我们会检测您设备的root状态。请您注意,为了便于您及时接收、发送聊天消息、接收消息通知,我们会在后台状态下获取您设备的MAC地址。 +
+我们可能会使用或整合您的上述日志信息与设备信息、账户信息、交易信息、支付信息以及其他取得您授权或依据法律共享的信息,综合判断您账户及交易风险、完成身份验证、检测,防范安全事件,并依法采取必要的记录、审计、分析、处置措施,保护各方合法权益稳定不受侵害。 +
+您理解并同意,为了帮助我们进行bug分析、反作弊、反黑产等安全保护工作,保障您正常使用本产品与/或服务、保障您的账号安全,在您的羽声语音App每次切换至后台或处于静默状态下或重新启动时,我们会收集您的Mac地址信息(包括手机Mac地址和蓝牙Mac地址)、IMEI、获取运行中进程信息、设备序列号、Android + ID、DEVICEID,我们将把读取频次控制在合理范围内。
+请您理解,单独的设备信息、日志信息等是无法识别特定自然人身份的信息。如果我们将这类非个人信息与其他信息结合用于识别特定自然人身份,或者将其与个人信息结合使用,则在结合使用期间,这类非个人信息将被视为个人信息,除取得您授权或法律法规另有规定外,我们会将该类个人信息做匿名化、去标识化处理。 +
+同时,为了维护网络安全、保障良好生态,便于公众为公共利益实施监督,依据《互联网用户账号信息管理规定》等法律规定,您的IP地址所对应的归属地域信息将会展示在您的个人资料页。境内展示到省(区、市),境外展示到国家或地区,信息以网络运营商数据为准,请您理解,该信息不会泄露您的详细地址,相关展示暂不支持手动开启或关闭。 +
+(十)我们获取的设备权限
+为确保相关业务功能的正常实现,我们需要根据具体的使用场景调用对应的必要权限。请您注意,您开启任一权限即代表您授权我们可以收集和使用相关个人信息来为您提供对应服务,若您关闭任一权限或取消授权,我们将不再基于对应权限继续收集和使用相关个人信息,也无法为您提供该权限所对应的服务。但是,您关闭权限的决定不会影响此前基于您的授权所进行的信息收集及使用。 +
+(十一)收集和使用个人信息的其他规则
+1、若您提供的信息中含有其他用户的个人信息,在向我们提供这些个人信息之前,您需确保您已经取得合法的授权。 +
+2、您理解并知悉,您向外部第三方(羽声语音直播关联公司不在此限)提供的个人信息,或外部第三方收集的您的个人信息,我们无法获取,更不会使用非常规方式(如:恶意干预对方系列APP数据)擅自以软件程序获得您的个人信息。羽声语音直播可能因业务发展的需要而确实需要从第三方间接收集(如共享等)您的个人信息的,且由我们直接或共同为您提供产品或服务的,我们会在收集前明确以书面形式要求该第三方说明其个人信息来源,以及是否已经就其收集、处理以及向我们提供您的个人信息取得了您的合法授权(如果使用方式和范围超出您在第三方原授权范围的,我们会再次征得您的授权同意)。我们的某些产品或服务由第三方业务合作伙伴提供或共同提供时,为了必要且合理的开展业务,我们可能会从部分业务合作伙伴处间接收集的您的部分信息、其他方使用我们的产品/服务时所提供有关您的信息。如果第三方的授权范围无法涵盖我们的处理和使用目的时,我们会自行或者要求该第三方征得您的同意后再行处理您的个人信息。 +
+3、如果某一需要收集您的个人信息的产品/服务未能在本隐私政策中予以说明的,或者我们超出了与收集您的个人信息时所声称的目的及具有直接或合理关联范围的,我们将在收集和使用您的个人信息前,通过更新本隐私政策、页面提示、弹窗、站内信、网站公告或其他便于您获知的方式另行向您说明,并为您提供自主选择同意的方式,且在征得您明示同意后收集和使用。 +
+4、征得授权同意的例外
+您理解并同意,在以下情况下,我们无需取得您的授权同意即可收集和使用您的个人信息: +
+(1)与国家安全、国防安全有关的;
+(2)与公共安全、公共卫生、重大公共利益有关的;
+(3)与犯罪侦查、起诉、审判和判决执行等有关的;
+(4)出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的; +
+(5)所收集的个人信息是您自行向社会公众公开的;
+(6)从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道,并依照《个人信息保护法》规定在合理的范围内处理您自行公开或者其他已经合法公开的个人信息; +
+(7)根据您的要求签订合同所必需的;
+(8)用于维护所提供的产品或服务的安全稳定运行所必需的,例如发现、处置产品或服务的故障; +
+(9)为合法的新闻报道所必需的;
+(10)学术研究机构基于公共利益开展统计或学术研究所必要,且对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的; +
+(11)法律法规规定的其他情形。
+我们需要特别提醒您的是:由于我们的产品和服务较多,为您提供的内容也不同,因此收集的您的个人信息也会因产品/服务的内容不同而有所区别,具体以产品/服务实际提供为准。我们可能会不时推出新的或优化后的功能,或者依据最新法律法规要求,可能需要收集、使用您的新的个人信息或变更个人信息使用目的或方式。届时,我们将通过更新本政策、弹窗、页面提示等方式另行向您说明并为您提供自主选择同意的方式,且在征得您同意后再收集、使用。 +
+三、我们如何使用Cookie和第三方H5页面
+为使您获得更轻松的访问体验,您使用羽声语音直播产品或服务时,我们可能会通过采用各种技术收集和存储您访问羽声语音直播服务的相关数据,在您访问或再次访问羽声语音直播服务时,我们能识别您的身份,并通过分析数据为您提供更好更多的服务。包括使用小型数据文件识别您的身份,这么做是为了解您的使用习惯,帮您省去重复输入账户信息的步骤,或者帮助判断您的账户安全。这些数据文件可能是Cookie、Flash + Cookie,或您的浏览器或关联应用程序提供的其他本地存储(统称“Cookie”)。
+网页上常会包含一些电子图像,称为“单像素GIF文件”或“网络beacon”,它可以帮助网站计算浏览网页的用户或访问某些cookie。我们会通过网络beacon收集您浏览网页活动信息,例如您访问的页面地址、您先前访问的援引页面的位址、您停留在页面的时间、您的浏览环境以及显示设定等。 +
+如果您的浏览器或浏览器附加服务允许,您可以修改对Cookie的接受程度或者拒绝羽声语音直播的Cookie(如:在浏览器具备该功能的前提下,可以通过您的浏览器的设置以管理、部分或全部拒绝Cookie与/或同类技术;或删除已经储存在您的计算机、移动设备或其他装置内的Cookie与/或同类技术,从而实现我们无法全部或部分追踪您的个人信息。您如需详细了解如何更改浏览器设置,请具体查看您使用的浏览器的相关设置页面),但拒绝羽声语音直播的Cookie可能无法使用由我们提供的、依赖于Cookie的功能或服务(如有)。 +
+第三方H5页面。为了提升服务便捷性、方便用户快速触达第三方服务,我们可能会接入第三方的H5服务页面入口,如果您进入这些H5页面,该第三方可能会收集你的手机号、身份证件号、付款账号信息,请注意,您在以上第三方H5页面进行的各项操作请遵守该等第三方的隐私保护政策。当您离开我们平台跳转至第三方H5页面时,我们提醒您注意保护个人隐私。本平台不收集、不存储您在该类第三方服务页面填写和提交的任何个人信息。 +
+四、我们如何共享、转让、公开披露您的个人信息
+(一)共享
++ 我们不会与陕西启星汇申网络科技有限公司及关联方以外的任何公司、组织和个人分享您的个人信息,但以下情况除外: +
+1、获得您(及监护人)明确同意或授权的共享;
+2、基于法定情形提供。根据法律法规的规定、诉讼争议解决需要、您与我们签署的相关协议(包括在线签署的电子协议及平台规则)或法律文件,或行政、司法等有权机关依法提出要求时,我们可能会共享您的个人信息; +
+3、提供统一管理服务。为便于您统一管理账号,体验更优质的服务,我们可能会向我们的关联公司共享您的个人信息。但我们只会共享必要的个人信息,如果我们共享您的个人敏感信息或者关联方改变个人信息的使用目的,将再次征求您的授权同意; +
+4、提供必要的合作服务并保证服务安全、优化。我们提供的产品/服务大多是无法单独完成的,故我们的某些服务将由业务合作伙伴提供。为保障为您提供的服务顺利完成,我们可能会将您的个人信息共享给我们的合作伙伴,包括基础技术服务、支付服务、营销活动等的合作商、第三方商家、广告商等;同时,为了向您提供更完善、优质、安全的产品和服务,我们的应用中会嵌入授权合作伙伴的软件工具开发包(本政策中简称“SDK”)或其他类似的应用程序,我们的某些服务将由授权合作伙伴提供或使用第三方SDK相关技术为您提供服务。基于此,我们会与合作伙伴共享您的某些个人信息,或者第三方SDK会通过SDK方式收集您的个人信息,具体包括:
+(1)第三方账号登录、内容分享。QQ、微信、新浪微博会通过SDK方式收集您的位置信息、网络信息(包括Wi-Fi信息)、设备标识信息(MAC地址、IMEI、IMSI)、运营商信息、外部存储设备信息,用于实现第三方账号授权登录、共享发布的内容及评论等信息。 +
+(2)安全监测与风险防范。为了保障您的账号安全,避免您遭受欺诈、网络病毒、网络攻击等风险,为我们提供安全保障的合作伙伴会通过SDK方式收集与您有关的必要设备信息、日志信息,以及您的使用习惯和常用软件信息等来综合判断您的账号及交易风险,预防安全事件的发生。 +
+(3)支付与结算功能。支付功能由与我们合作的第三方支付机构向您提供服务,基于此,支付宝、微信、银联会通过SDK方式收集您的手机号、设备信息识别码(包括IMSI)、位置信息、网络信息(包括Wi-Fi信息)、当前运行进程/获取运行中进程信息、屏幕参数、运营商信息,保证充值、消费、支付功能的正常使用,这些信息是支付功能所必需的信息,拒绝提供将导致您无法使用该功能。当您提现收入(如有)时,为了您能及时完成收入的结算与提现、依据法律规定完成税费缴纳,将由与您另行单独确认的第三方服务方向您提供结算、税费扣缴服务,基于此,我们会向该类第三方服务方共享您提现时主动提供的收款账户信息以及身份信息,具体信息详见第二节第(七)款。 +
+(4)人脸识别。阿里云、腾讯云、字节跳动会通过SDK方式收集您的证件信息、设备标识信息、网络信息(包括Wi-Fi信息)、设备传感器信息、屏幕参数、应用列表,该等第三方获取的面部特征信息用于人脸核验,我们只获得核验结果,不保存您的面部特征信息。 +
+(5)直播视频服务。声网、会通过SDK收集您的共享Wi-Fi信息、设备标识信息、地理位置信息、运营商信息、外部存储设备、当前运行进程/获取运行中进程信息、屏幕参数,并共享用户授予的读取/写入外置存储、位置权限、获取设备信息、相机/摄像头权限、读取手机/电话状态,用于聊天室内和IM音视频通话,图片上传、直播推流和直播回放功能等相关功能。 +
+目前,我们接入的第三方服务商主要包括以下几种类型:
+用于消息推送功能,包括手机厂商Push推送、特定事件提醒; +
+用于支付相关服务,包括订单支付、交易行为核验、收入结算、支付信息汇总统计; +
+用于在您同意的情况下获取设备位置权限、搜集设备信息和日志信息; +
+用于第三方授权服务,包括第三方账号登陆、将有关内容分享至第三方产品; +
+用于优化产品性能,包括提高硬件配网能力、降低服务器成本、功能热修复; +
+用于账号安全、产品加固相关服务,包括网络监测、域名解析、防劫持、防黑产、反作弊、加解密服务。 +
+我们接入的部分第三方SDK可能会收集您的个人信息,如您在我们的服务中使用这类由第三方提供的服务时,您同意将由其直接收集和处理您的信息。我们会评估这类第三方服务收集个人信息的合法性、正当性、必要性,要求该等第三方对您的个人信息采取保护措施,并严格遵守相关法律法规与监管要求。您可以查看下方《语音接入第三方SDK目录》,了解我们主要接入的第三方SDK基本情况。 +
+羽声语音直播接入第三方 SDK 目录(与全国平台登记信息完全一致) +
++
1、SDK 名称:APP 支付客户端 SDK
开发者信息:支付宝(杭州)信息技术有限公司
服务类型:唤起支付宝 App 完成支付
所涉信息:设备 MAC 地址、网络访问、WiFi 状态、读取电话状态、写入外部存储
隐私政策链接:https://opendocs.alipay.com/open/54/01g6qm
+
+
2、SDK 名称:QQ 互联 SDK(QQ 开放平台)
开发者信息:深圳市腾讯计算机系统有限公司
服务类型:QQ 分享、授权登录
所涉信息:设备标识信息(IMEI/AndroidID/ICCID)、定位信息、地理位置、ANDROID_ID
隐私政策链接:https://connect.qq.com/index.html
+
+
3、SDK 名称:微信 OpenSDK Android
开发者信息:深圳市腾讯计算机系统有限公司
服务类型:微信分享、微信登录、微信支付、微信客服
所涉信息:设备标识信息(IMEI/AndroidID/ICCID)、定位信息、地理位置、ANDROID_ID
隐私政策链接:https://support.weixin.qq.com/cgi-bin/mmsupportacctnodeweb-bin/pages/RYiYJkLOrQwu0nb8
+
+
4、SDK 名称:声网音视频 SDK(含音频 RTC)
开发者信息:上海声网科技有限公司
服务类型:提供实时音频服务
所涉信息:设备 MAC 地址、IP 地址、网络访问、WiFi 状态、设备信息、文件存储权限、麦克风权限
隐私政策链接:https://www.shengwang.cn/SDK-privacy-policy/
+
+
5、SDK 名称:腾讯云即时通信 IM SDK
开发者信息:腾讯云计算(北京)有限责任公司
服务类型:即时通信(私聊、群聊、房间内公屏聊天)
所涉信息:设备 MAC 地址、IP 地址、网络状态、文件存储权限、麦克风权限、相机权限
隐私政策链接:https://cloud.tencent.com/document/product/269/58094
+
+
6、SDK 名称:ShareSDK(含友盟统计 / 友盟推送)
开发者信息:广州掌淘网络科技有限公司(ShareSDK)
服务类型:社会化分享、统计分析、消息推送
所涉信息:设备标识符(IMEI/Mac/android ID/IDFA/OPENUDID/GUID、SIM 卡 IMSI 信息)、社交账号公开信息、地理位置、IP 地址、应用列表
隐私政策链接:https://www.umeng.com/page/policy
+
+
7、SDK 名称:Bugly Android
开发者信息:深圳市腾讯计算机系统有限公司
服务类型:定位崩溃、异常上报与运营统计
所涉信息:日志信息(自定义日志、Logcat 日志、崩溃堆栈)、设备 ID(androidid / idfv)、联网信息、系统名称、系统版本、国家码
隐私政策链接:https://privacy.qq.com/document/preview/fc748b3d96224fdb825ea79e132c1a56
+
+
8、SDK 名称:腾讯云慧眼人脸核身增强版 SDK
开发者信息:腾讯云计算(北京)有限责任公司
服务类型:实名认证
所涉信息:个人身份信息(真实姓名、身份证号)、面部识别特征、读取短信、联系人、通话记录、位置信息、设备标识信息(IMEI、IMSI、AndroidID)
隐私政策链接:https://cloud.tencent.com/document/product/1007/66043
+
+
9、SDK 名称:音视频通话 TRTC SDK(Android)
开发者信息:深圳市腾讯计算机系统有限公司
服务类型:即时语音通话(私聊、群聊、房间内公屏聊天)
所涉信息:设备 MAC 地址、IP 地址、网络状态、文件存储权限、麦克风权限、相机权限
隐私政策链接:https://cloud.tencent.com/document/product/647/57574
+
+
10、SDK 名称:号码认证-android(阿里云一键登录)
开发者信息:阿里巴巴云计算(北京)有限公司
服务类型:手机号一键登录
所涉信息:网络类型、设备信息(IP 地址、设备制造商、设备型号、手机操作系统、SIM 卡状态)、运营商类型、本机号码
隐私政策链接:https://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud202112211045_86198.html
+
+
11、SDK 名称:对象存储 OSS Android SDK(阿里云)
开发者信息:阿里云计算有限公司
服务类型:平台图片、视频、礼物等文件存储
所涉信息:设备型号、设备操作系统信息(用于兼容性适配与故障排查)
隐私政策链接:https://terms.alicdn.com/legal-agreement/terms/privacy_policy_full/20240202100310511/20240202100310511.html
+
+
12、SDK 名称:腾讯云 COS 文件存储器 SDK
开发者信息:腾讯云计算(北京)有限责任公司
服务类型:平台图片、视频、礼物等文件存储
所涉信息:设备型号、设备操作系统、IP 地址、网络连接类型(用于兼容性与传输优化)
隐私政策链接:https://cloud.tencent.com/document/product/454/61839
+
13、SDK 名称:联通认证 SDK
开发者信息:联通在线信息科技有限公司
服务类型:手机号一键登录 / 本机号码校验
所涉信息:网络类型、网络地址(IP 地址)、运营商类型、本机手机号、手机设备类型、手机操作系统、硬件厂商
隐私政策链接:https://msv6.wosms.cn/html/oauth/protocol2.html
功能场景
++
自启动和关联启动说明:
+为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的广播信息,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现功能及服务所必要的。 +
+请您知悉:(1)我们仅会出于合法、正当、必要、明确的目的共享您的个人信息,并且授权合作伙伴只能接触到其履行职责所需信息。同时,我们会与合作伙伴签署严格的保密协定,要求他们按照我们的说明、本政策以及其他任何相关的保密和安全措施来处理您的个人信息;(2)前述第三方合作伙伴为数据控制者,以其自己的名义获得您的同意以处理您的个人信息。合作方可能有其独立的隐私政策,我们建议您认真阅读并遵守第三方的隐私政策。如果您拒绝我们的合作方在提供服务时收集为提供服务所必需的个人信息,将可能导致您无法使用相应服务。 +
+(二)转让
+我们不会将您的个人隐私信息转让给任何公司组织和个人,但以下情况除外: +
+1、在获取明确同意的情况下共享:获得您的明确同意后,我们将与其分享您的个人隐私信息; +
+2、在涉及合并、收购、资产转让、破产清算时,你的个人信息有可能因此而被转移,如涉及个人隐私信息转让,我们将要求受让方继续受此政策约束并告知您受让方身份、联系方式,否则我们将要求受让方向您重新索取授权同意。 +
+(三)公开披露
+1、公开披露是指向社会或不特定人群发布信息的行为。我们仅在下列情形下,公开披露您的个人隐私信息: +
+(1)征得您明确的授权同意;
+(2)基于国家法律法规的规定而对外披露;
+(3)应国家司法机关及其他有关机关基于法定程序的要求而披露; +
+(4)为公共利益实施新闻报道、舆论监督等行为在合理的范围内公开的; +
+(5)为应对突发公共卫生事件,或在紧急情况下,为保护其他用户及第三方生命健康和财产安全而必须披露的,在该情况下我们将在紧急情况消除后及时告知您; +
+(6)应用户监护人合法要求而提供用户个人身份信息时;
+(7)对违规账号、欺诈行为等进行处罚公告、公布中奖/获胜者等名单时脱敏展示相关信息等必要事宜而进行的必要披露。 +
+2、对于公开披露的您的个人信息,我们会在收到公开披露申请后第一时间且审慎审查其正当性、合理性、合法性,并在公开披露时和公开披露后采取最严格个人信息安全保护措施和手段对其进行保护。 +
+(四)共享、转让、公开披露个人信息时事先征得授权同意的例外 +
+下述情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意: +
+1、与国家安全、国防安全直接相关的;
+2、与公共安全、公共卫生、重大公共利益直接相关的;
+3、与犯罪侦查、起诉、审判和判决执行等直接相关的;或根据法律法规的要求、行政机关或公检法等有权机关的要求的; +
+4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到您本人同意的; +
+5、个人信息是您自行向社会公开的或者是从合法公开的渠道(如合法的新闻报道、政府信息公开等渠道)中收集到的; +
+6、根据与您签订和履行相关协议或其他书面文件所必需的; +
+7、法律法规等规定的其他情形。
+请知悉,根据适用的法律,若我们对个人信息采取技术措施和其他必要措施进行处理,使得数据接收方无法重新识别特定个人且不能复原,则此类处理后数据的共享、转让、公开披露无需另行向您通知并征得您的同意。 +
+五、我们如何存储和保护您的个人信息
+(一)个人信息的存储
+1、存储地点:我们会按照法律法规规定,将境内收集的用户个人信息存储于中华人民共和国境内。目前我们不会跨境传输或存储您的个人信息或向境外提供个人信息的场景。将来如需跨境传输或存储的,我们会单独向您明确告知信息出境的目的、接收方、使用方式和范围、安全保证措施等情况并征得您的同意。 +
+2、存储期限:除非依据法律法规或双方约定,我们只会在为实现服务目的所必需的最短时间内留存您的个人信息,此外,我们或对您的相关信息保存至相关法律所规定的必要期限(例如,根据《电子商务法》规定:商品和服务信息、交易信息保存时间自交易完成之日起不少于三年;根据《网络安全法》规定:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;根据《互联网用户公众账号信息服务管理规定》:互联网用户公众账号信息服务提供者应当记录互联网用户公众账号信息服务使用者发布内容和日志信息,并按规定留存不少于六个月)。 +
+我们在判断前述期限的标准主要包括并以其中较长者为准:
+A. 完成与您相关的服务目的、维护相应服务及业务记录、应对您可能的查询或投诉;
+B. 保证我们为您提供服务的安全和质量;
+C. 您是否同意更长的留存期限;
+D. 是否存在保留期限的其他特别约定。
++ 在超出保存期限后,我们会根据适用法律的要求删除或者匿名化处理您的个人信息,但法律有特殊要求的除外。 +
++ 当我们的产品或服务发生停止运营的情况时,我们将以推送通知、公告等形式通知您,并在合理期限内删除您的个人信息或进行匿名化处理,法律法规另有规定的除外。 +
+(二)个人信息的保护措施
+数据传输方面,采用传输层安全协议等密码技术,通过Https等方式防止传输链路被嗅探、窃听截取风险,建立安全的隐私数据采集环境,保证数据采集的私密性和完整性。 +
+数据存储方面,我们会通过安全的方式存储您的信息,包括本地存储(例如利用APP进行数据缓存)。我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。您可以自主选择删除观看历史、视频缓存、搜索记录等您在使用羽声语音APP服务时提供和产生的数据记录。
+信息安全方面,我们努力为您的信息安全提供保障,以防止信息的泄露、丢失、不当使用、未经授权访问和披露等。我们使用多方位的安全保护措施,以确保您的个人信息保护处于合理的安全水平,包括技术保护手段、管理制度控制、安全体系保障等诸多方面。 +
+数据访问和使用的安全控制方面,实施严格的数据权限控制机制,采取多重身份认证技术,并对能够处理您的信息的行为进行监控,避免数据被违规访问和未授权使用。 +
+建立完整的审计机制,对数据生命周期的全流程进行监控与审计,防止您的个人信息遭遇未经授权的访问、公开披露、使用、修改、人为或意外的损坏或丢失。 +
+其他可行的安全组织和管理措施:
+1、在我们从第三方间接收集您的个人信息前,我们会明确以书面形式(如合作协议、承诺书)要求该第三方在已经取得您明示同意后收集以及处理(如共享等)个人信息,在书面协议层面要求第三方对个人信息来源的合法性和合规性作出承诺,如第三方有违反行为的,我们会明确要求对方承担相应法律责任; +
+2、在我们向业务合作伙伴共享您的个人信息前,我们会严格要求合作伙伴的信息保护义务与责任,并要求业务合作伙伴在合作前需与羽声语音直播签署关于数据安全的保护协议,一旦业务合作伙伴有任何违反协议的行为,将须承担相应法律责任; +
+3、我们建立了合理有效、科学健全的安全应急响应体系,明确了网络安全事件的分类分级标准、安全应急响应组织及职责,并根据安全事件的不同类型和级别制定了适当的应急响应预案,明确规范了安全事件的报告流程和应急响应处置流程。同时,我们还具备“羽声语音直播”安全应急响应中心,由专业的安全技术和运营团队负责维护,便于及时有效的响应、处置各类安全漏洞和突发事件,联合相关部门进行安全事件溯源和打击; +
+4、如不幸发生个人信息安全事件的,我们将按照法律法规的要求,及时向您告知安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。 +
+5、请您知悉并理解,互联网并非绝对安全的环境,我们强烈建议通过安全方式、使用复杂密码,协助我们保证您的账号安全。如发现自己的个人信息泄密,尤其是您自己的账户或密码发生泄露,请立即根据本政策文末中提供的联系方式联络我们,以便我们采取相应措施来保护您的个人信息安全。 +
+六、您如何管理您的个人信息
+您对您的个人信息享有以下权利:
+(一)访问权
+1、账号信息:您可以通过相关产品页面随时登陆您的个人账号,随时查询或访问您的账号中个人资料信息,包括:头像、昵称、星座、城市等。例如:“头像/昵称”信息在羽声语音直播APP中的访问路径为:我的—头像栏;在羽声语音直播微信小程序的访问路径为:我的->点击个人头像->点击头像右下角编辑icon可进入资料编辑页面。 +
+2、使用信息:您可以通过相关产品页面随时查阅您的使用信息,包括:订单记录、浏览记录、动态记录等。例如:“浏览记录”信息在羽声语音直播APP和微信小程序中的访问路径为:我的—足迹;
+3、财产信息:您可以通过羽声语音直播APP 我的-钱包,以及羽声语音直播微信公众号-钱包查阅;
+4、其他信息:您也可以在【我的】-【帮助与反馈】-【个人信息收集清单】中集中查询您的网络身份标识和鉴权信息、身份信息、用户基本资料、个人财产信息、用户使用过程信息、设备信息、内容制作与发布。如您在访问过程中遇到操作问题或如需获取其他前述方法无法获知的个人信息内容,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,但法律法规另有规定或本政策另有约定的除外。 +
+我们会按照如下规则进行个性化推荐或定向推送,并为您提供相应的退出机制:
+我们会根据您的喜欢为您提供个性化的推广内容,
+例如在主页推荐房间、派对 - + 推荐;您可以通过“我的-设置-个性化推荐”-关闭。关闭后,您看到的相关内容以房间活跃值默认展示。
+(二)复制权
+若您需要复制我们收集的关于你本人的基本资料、身份信息的,您可通过本政策第九节提供的方式联系我们,我们将在核实您的身份后在合理期限内向您提供,或在技术可行的前提下根据您的请求将您的个人信息转移至指定的个人信息处理者,但法律法规另有规定或本政策另有约定的除外。 +
+(三)更正/修改权
++ 若您发现您提供给我们的个人信息存在登记错误、不完整或有更新的,您可在我们产品和/或服务中更正/修改您的相关个人信息。 +
+1、对于您的部分个人信息,您可以按照相关功能页面的指引和设置在线进行更正/修改。例如“头像/昵称”信息更正/修改路径为:我的—头像栏—编辑资料; +
+2、对于您在行使上述权利过程中遇到的困难,或者其他可能目前无法向您提供在线自行更正/修改服务的,经过对您身份的验证,且更正/修改不影响信息的客观性和准确性的情况下,您有权对错误或不完整的信息作出更正或修改,或在特定情况下,尤其是数据错误时,通过我们公布的反馈与报错等措施将您的更正/修改申请提交给我们,或联系我们(联系方式:详见下文第九节),要求我们更正或修改您的数据,但法律法规另有规定的除外。但出于安全性和身份识别的考虑,您可能无法修改注册时提交的某些初始注册信息。 +
+(四)删除权
+1、对于您提供的部分个人信息,您可以自行通过我们提供的相关产品和服务的功能页面,主动删除您提供信息。例如:“头像/昵称”信息在羽声语音APP中的删除路径为:【我的-个人主页-资料】。您也可以自主删除您发布的视频、动态、图片等。一旦您删除后,我们即会对此类信息进行删除或匿名化处理,法律法规另有规定的除外。
+2、在以下情形中,您可以通过本政策第九节提供的联系方式向我们提出删除个人信息的请求,但已做匿名化处理或法律法规另有规定的除外: +
+(1)如果我们处理个人信息的行为违反法律法规;
+(2)如果我们收集、使用您的个人信息,却未征得您的明确同意; +
+(3)如果我们处理个人信息的行为严重违反了该政策;
+(4)如果您主动注销了账号;
+(5)当我们终止服务及运营时。
+(五)撤回同意权
+1、我们提供的产品或服务的部分功能需要获得您使用设备的相关权限(包括:位置、相机、麦克风等,详见本隐私政策第二节第(十二)条“我们获取的设备权限”,具体以产品实际获取的功能为准)。您可以在授权后随时撤回(或停止)对该权限的继续授权,包括通过您设备中的设置页面或羽声语音APP的相关路径(“我的-设置-隐私-隐私权限设置”)撤回相关授权。示例路径如下: +
++ (1)位置的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问位置信息】撤回同意; +
++ (2)相机的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意; +
++ (3)麦克风的权限:您可通过【我的-设置-隐私-隐私权限设置-允许羽声语音直播访问相机】撤回同意; +
+(4)日历的权限:您可通过【我的-系统设置-系统权限管理】撤回同意。
+2、就我们通过短信的方式向您发送的商业性服务信息,如果您不想收到此类信息,您可以通过联系我们(联系方式:详见下文第九节),或者通过编辑“T”或“TD”并回复短信进行退订,提请注意:我们不会就您申请退订额外收取任何费用,但可能会发生一定的通信或者网络费用,具体以通信运营商与您约定为准,退订成功后我们将不再向您发送此类型的短信。就我们通过您设备的系统通知向你推送的内容,如果您不想收到此类信息,你可选择在设备中关闭羽声语音直播的通知功能。
+3、对于合作方使用或我们转让、公开披露您的个人信息,您可以通过我们的相关功能页面或联系我们、合作方,撤回您的授权,但法律法规另有规定或本隐私政策另有约定的除外。 +
+4、您可以通过卸载羽声语音App的方式撤回我们通过当前设备对您的个人信息的收集能力。 +
+5、当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。当您更新APP版本后,未经您的明确同意,我们不会更改您之前设置的权限状态。 +
++ 6、对于您无法直接通过上述路径改变授权同意或撤回同意的,您均可通过本政策第九节提供的方式联系我们进行处理,但法律法规另有规定或本政策另有约定的除外。 +
+(六)注销权
+我们向您提供账户注销的途径。在您符合国家相关法律法规规定及约定注销条件的情况下,可以通过本隐私政策预留的联系方式(详见下文第九节)或在线申请注销您的账户。
+提请注意:当您注销账号后,您将无法再以该账号登录和使用我们的产品与服务;且该账号在羽声语音及旗下的其他产品与服务使用期间已产生的但未消耗完毕的权益及未来的预期利益等全部权益将被清除;该账号下的内容、信息、数据、记录等将会被删除或匿名化处理(但法律法规另有规定或监管部门另有要求的除外,如依据《中华人民共和国网络安全法》规定,您的网络操作日志将至少保留六个月的时间);羽声语音账号注销完成后,将无法恢复。更多关于羽声语音账号注销的流程、条件等事项请详见《帐号注销须知》。 +
+如您在谨慎考虑后仍执意决定注销您的羽声语音直播账号的,您可以在您使用的我们的产品/服务的相关功能设置页面或根据操作指引向我们提交注销申请,羽声语音APP的在线申请注销路径为:【我的】-【设置】-【账号与安全】-【安全中心】-【注销账号】;羽声语音直播微信小程序可以选择通过上述羽声语音APP注销路径、联系客服或者通过本隐私政策第九节预留的联系方式申请注销。 +
++ 在您主动注销账户之后,我们将停止为您提供产品或服务,根据适用法律的要求删除您的个人信息,或使其匿名化处理。 +
+(七)约束信息系统自动决策
+在某些业务功能中,我们可能仅依据信息系统、算法等在内的非人工自动决策机制做出决定。如果这些决定显著影响您的合法权益,您有权通过本政策第九节提供的联系方式要求我们做出解释并拒绝我们仅通过自动化决策的方式作出决定,我们也将在不侵害羽声语音直播商业秘密或其他用户权益、社会公共利益、国家利益的前提下做出合理解释、处理。 +
+(八)我们对去世用户的个人信息保护 +
+1. + 羽声语音直播将根据《个人信息保护法》的相关规定保护死者个人信息。羽声语音用户(仅限自然人)去世后,其近亲属为了自身的合法、正当利益,可以通过本隐私政策第九节“联系我们”中公示的联系方式,对去世用户的相关个人信息行使查阅、复制、更正、删除等权利,但是去世用户生前另有安排的除外。 +
+2. + 您理解并确认,为了充分保护去世用户的个人信息权益,申请行使本条权利的去世用户近亲属需要根据羽声语音直播的指定流程或客服提示,提交去世用户的身份证明文件、死亡证明文件、申请人的身份证明文件、申请人与去世用户的亲属关系证明文件,并提供申请行使的权利种类、目的。更多关于去世用户的个人信息保护流程、条件等事项请联系在线客服。 +
+(九)响应您的上述请求
++ 如果您在行使上述权利、处置您的个人信息时有任何疑问,您均可以通过本隐私政策第九节中公示的联系方式与我们沟通解决。 +
++ 为保障安全,当您提出前述请求时,您需要提供上述要求材料,或以其他方式证明您的身份,再处理您的请求,若您拒绝提供相应证明材料,我们将无法响应您的请求。我们将在15日内做出答复。在以下情形中,按照法律法规要求,我们将无法响应您的请求: +
+1、与国家安全、国防安全、国家利益有关的;
+2、与公共安全、公共卫生、重大公共利益有关的;
+3、与犯罪刑事侦查、起诉、立案、审判和执行判决等有关的; +
+4、有充分证据表明个人信息主体存在主观恶意串通妨碍第三人行使合法权益或滥用权利使其他个人、组织的合法权益受到严重损害的; +
+5、响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的; +
+6、涉及商业秘密的。
+七、未成年人保护
+我们的产品、网站和服务主要面向成年人。您知悉,羽声语音直播将依赖用户提供的个人信息判断用户是否为未成年人。若您是未成年人,建议您及您的监护人仔细阅读本政策,并在征得您的监护人同意的前提下使用我们的产品或服务或向我们提供信息。对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况,我们只会在法律法规允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。 +
+特别地,若您是14周岁以下的儿童,将适用《羽声语音儿童个人信息保护规则》,建议您及您的监护人仔细阅读《羽声语音儿童个人信息保护规则》,并在征得您的监护同意的前提下使用我们的产品或服务。 +
+若您是未成年人的监护人,一旦发现未成年人虚报年龄注册账号的,可通过本政策第九节所述方式向我们提出中止/终止该未成年人的账号或者要求向该未成年人提供青少年保护服务模式下的产品与/或服务。为了验证请求方为未成年人的监护人,特别是当您作为监护人提出资金类申请时,我们可能需要您向我们提供被监护人以及监护人的身份证(正面及反面)复印件/扫描件一份、可证明法定监护关系的有效法律文件(如出生证明、户口本)以及监护人手机号码、收款账号信息(如需),以保障用户的账号与资金安全。我们在收到您的上述文件后,会及时审核其真实性和有效性,并请确保监护人的手机畅通,以便我们的专业客服联系您进一步核实身份(如需)。同时,我们将依法记录、保存验证身份信息及验证结果,这些信息仅供完成验证、争议解决服务之目的,或者其他法律法规所规定的用途,我们向您承诺,我们会以最大努力保障您的个人信息安全,未经您明示授权不会用作其他目的。以上信息包含您及您所监护的未成年人的个人敏感信息,您有权拒绝提供,但我们收集这些信息是为了调查事实与帮助您解决问题,如您拒绝提供上述信息,我们可能无法向您及时反馈投诉、申诉或咨询结果。 +
+若您是未成年人的监护人,当您对您所监护的未成年人的个人信息保护有任何相关疑问时,请通过第九节“联系我们”中公示的联系方式与我们联系。 +
+八、本政策的更新
++ 为保证您能够获得更好的服务并应平台业务调整以及未来发展,本政策也会与时俱进随之更新。但在更新的同时,我们会以单独、明显的方式获取您的授权。 +
++ 我们在应用程序、官方网站更新版本后或官方发出公告后以合理、适当、明显的方式提醒您相关内容的更新,以便您能更快了解您权利的更迭。 +
++ 对于重大变更,我们还会提供更为显著的通知方式(我们会通过包括但不限于邮件、短信、公告、首页或在浏览页面做特别提示等方式,来向您表达政策的更新内容)。 +
+本政策所指的重大变更包括但不限于:
+(一)我们的服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等; +
+(二)我们在所有权结构、组织架构等方面发生重大变化。如业务调整、破产并购等引起的所有者变更等; +
+(三)个人信息共享、转让或公开披露的主要对象发生变化; +
+(四)您参与个人信息处理方面的权利及其行使方式发生重大变化。 +
+九、联系我们
++ 如您对本政策(或您个人信息的相关事宜)有投诉、举报、意见或建议的,可以通过如下方式与我们(陕西启星汇申网络科技有限公司)联系,我们将在15天内予以您答复: +
+1、羽声语音站内客服:【我的】-【在线客服】-输入“人工客服”进行咨询; +
+2、人工客服电话:17531991222
+3、个人信息保护负责人电话:17531991222
+4、我们还设立了个人信息保护专职部门,您可以写信至:陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层法务合规部(收);邮编710000
+十、其他
+本政策的解释、执行及争议解决均适用中华人民共和国法律(不包括冲突法)。因本政策产生争议的,双方应首先友好协商,协商不成的,您同意通过被告所在地有管辖权的法院提起诉讼来寻求解决方案。 +
+陕西启星汇申网络科技有限公司
+陕西省咸阳市高新技术产业开发区高科三路科技企业孵化园3栋4层
+陕ICP备2024054760号-7A +
+ + ++ \ No newline at end of file diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java index edb6cb75..acb3ce81 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/base/CommonAppContext.java @@ -165,7 +165,11 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio adjustFontScale(getResources().getConfiguration()); CrashHandler.init(this); - + if (currentEnvironment.getShelf()==1){ + if (SpUtil.getShelf()!=1) { + SpUtil.setShelf(1); + } + } } public void adjustFontScale(Configuration configuration) { @@ -438,7 +442,7 @@ public class CommonAppContext extends MultiDexApplication implements Applicatio initARouter(); if (SpUtil.isAgreePolicy()) { checkInEmulator(); - UtilConfig.checkInEmulator(); +// UtilConfig.checkInEmulator(); AgoraManager.getInstance(this); AgoraManager.init(currentEnvironment.getSwSdkAppId()); MessageListenerSingleton.getInstance(); diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomSettingBean.java b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomSettingBean.java index 868bd095..36e0d529 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomSettingBean.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/bean/room/RoomSettingBean.java @@ -18,7 +18,10 @@ public class RoomSettingBean implements MultiItemEntity { public static final int QXRoomSettingTypeRoomTypeGirl = 13; ///交友 房 public static final int QXRoomSettingTypeRoomTypeJiaoy = 27; + //互娱 public static final int QXRoomSettingTypeRoomTypeHUYU = 28; + //练歌房 + public static final int QXRoomSettingTypeRoomTypeLianG = 31; /// 常用工具 /// 房间补贴 diff --git a/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java b/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java index 138f6520..b3534dac 100644 --- a/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java +++ b/moduleUtil/src/main/java/com/xscm/moduleutil/listener/MessageListenerSingleton.java @@ -72,16 +72,50 @@ public class MessageListenerSingleton { private List
Oo!_-R^9gcFlQA_34gL7S?9blt^sH*j<~pg0 zY8ac8>Gl6SGh3eZd&;~GO>!!S)zpy8fBSdK>fxgp%Ek~m@gk@RQb9u>KD)L&aIK+9 zNW-*Fq$vb7kh1#t-!B_)d9Q)Wn6##o5L7E_kXgL@V9RpvFOe~1drq(>6eK09;p#oh z=EKWRnPy|BAhJE{QE=_@nQhCR--xJIIt3YUL^yFT~GdJWdnUNX;m=24g& zKfLVz>f=d4<`vW~twn3wYvTHAmObA7i5aDY1lcWPHr5UZK7RW?mWO^JQCZCx6x9$K zkjOj~A@s`!m%Sdm=m`oUq3qm{ssWj%B0})^E0#SUy!;wU_SjI9Y0}UT8llWD9qem4 z`_}8S8r4d+7BU7Y$~0)W{?@b0{x4j~)-smWCYvi{OchzZa$z~i^Y5oth%z)xLxh5o z`7qD>&o3u?{zKOdt<6ibhG~>cBa|f9ubf{_`odc!tCcdXj1ehRYa6R;Z@sXb{Mk!S zAQ71~KvuIJp@`7qFF(7S#)DT}4I*R=8k$M7d4qzVzxZG|r4M}Kde$c)f *SKq#z>W6=PZ6XcRCK-oN(o}lto6lWN`yH467oj9n zvb7>(LH*+LUCZe|bI-e $658kre zv}gbBKYyI9kqQ|jitoPRS%=F_edfXozHr={i5 |06vjCnn)$TqM mn8dnr*w<@)fZZdCpiS4)Z(D};18fZa z0Bgy}4Rxs-RHLV7;SW4U ;DVE`wSoI3_j`~v;@}uG VC!0GvXPeJxkI#bVBmDv(5(m>Cz=KL90OP!_qer5>VJ|>X=|LyJ1)nqsmsT}WY zmXWJt35Z-d0QQI~F%0hklao5^|ta8jAUbN*>W{F}=TYSgP7oytGo~lX%NLrZ! z>7!&IpDz1CmNBM$E9%9o@kZ5-?#-dQD&PYhzJ|AYeR0Y-q@gusj!L *4wmWpJcmQy#%^hEz&pFol7AsUFNbU?-hsz>F)y zt^^%v_l>(~C+v#8NF=bK2UPSGiTCP1vLpjC@EY1I{5||iaCCLwrG?)oWJ(%K@Qpa> z`^f?Z!*xzcL^_*3$JZXdN`(a2d*(5g&`~+_eX@#p6VCM&hqspIR@AWD?ZKaBaq1;h zE{6NowyMz|$Bh~jZSQh7j$h+xGMD(>&dL=bk0NSSq^APIl$B~7t~OxR)Ex&Z^jd~Z zyb|Z#mB>Of={JcIkl(D{Oar^-d2VFPH20OrTb4}JNc_SQfd~XHY{wKHae=Apa1M~3 zWXn8I6QG_N^xyx)LLT2UCfbW%W9CS+P*UUp;2c#-JB$;tU*)VP&KAL5@QJ43$mv)o zW8Zk36rdVv#eG>rof{(o)imGrLP9R~%BqubQ2+pVe~bZhT4e+Qd2h*@s+NE5&xyYB z@BL@WN_awZe=xpk!_WhUKhil>AcOz+NHLBCp~YS=(|61H70>sT|NnSv|L<7;|J~lr K|Ix?50000s`^uXD literal 0 HcmV?d00001 diff --git a/moduleUtil/src/main/res/mipmap-xxhdpi/muisc_reward.webp b/moduleUtil/src/main/res/mipmap-xxhdpi/muisc_reward.webp new file mode 100644 index 0000000000000000000000000000000000000000..c563f6d703af4b4ad281c1ef13c03c468179a639 GIT binary patch literal 1618 zcmV-Y2Cey0Nk&FW1^@t8MM6+kP&il$0000G0000x0027x06|PpNMQp200E$MYumBC zUC`6KU+UPdZQHgxvTb8#+jcv$ZQHgTe>{%Cecku-ylF&CK-I><8{YlrAGdBXp!z>9 zc4w#R qAuBvL} wY;!l8Lr&)l>rugYm!`m>=r8C8t05JtoW?VW?b30B}fhO{uJ2f`oQ}b98BKUNU zrq)DJAxD5Ig0gW_2P>jtDPs8^P3>lgbs-@^cWG)2fl7dgVn~AXH&s2HU>*ff5JmKc zs__-Rv^JoMqRO{RH`m(f?;N6_kf5S}Zrf_Es^ %_5jZBm<)I^+L7gds-4y6h*}lMHLgCnXkrN7xf5cK|u;oQ~|W-qPfa; zoGc}!1R-W|%Em x|C}@}<{$Yts>x3>r zQ6M2h1{FXgq5Fh>(TJzP7>ua{<`MDHVbPLP02CDw3kg7#01=(MWVEM+*er%5M(!D1 zmmvTWY7meSy)JquK_M`vL_swYg%_hKqKa8a+WtqRpctbK5ugNp1)`|fII2j2QKtfk z?M6i<>5P6A(Hs&`fFh`%fbvW9vRM>UlG=zVBKlf%ok%7Hn+2kjd!nONF+`fHdrY)) zuPKtK4WUxdvvM@)O9Vr(KB*~)pz_JYXuzF AQEns>uPjOcoSDH4zmR<9}}(UNt+%9`E)7rdSS!y|3;%N7Zy| z?4iG#l7K>j(X`Vi^{d)B;PlV_>jhO5RTSv^_mk7dRc#-;^I6aR1VO&%$LG%5Zd^4> z_8+;xx(8kV(#L q3k)l`9X|zYbyuP6Ndoq;HrHI uN~5LnNb-jniJgRZ&CIG6s;GqQ{Hxy;H~gfkw0qtv^SPn z;VYNf_X_g-^+>5;_}cV@0092uQ~&-LV*mT^FIXJt&r$w|{7J~4Rq*fqdP3c%Rz8QT zp{7|k_80Q1{tf6QOU@8;!Qu?u`)`VAvutMss6OL)SVIwVDoS1|ibeeuerJCeEs48O z%E6tu+PQGg`;$Na<3gT4sBr}>;E&e5XGLi1Dywv&^Z!s|P>07O-dRS)ZSojr$B*ti z3&!QG3r;QYuC@5 Fgo*Ow;)Q zO}qtI2B2;l?Hq5y`qp7HgZ(@Cs`^v7k?~jm$J?Aehi8)-TRnV6Fh`XdgS_7P+%WG= zN?!n>+d#UDfG5mDS28l3e!=>?2rU@v?V5IIw81XPNJ=w}v^ Sn9XF_rH8OSNZ(x+!~puKs<;@^g-Ax3eJ+%uqAsihnTw{ncYvYW5_7zbscV z<<0>t4t#Up3ZvV6q#&|xw-G!1Mn;DI`_!5 x_m{kVnsy(6>|cIzB*z`1r4^g zD}qI2;L&AAmr$uY7$rkRQB=(PkC>}qM%6hYSOf(r_}9Y=MgUrMHPWRkfqu8j=**m| zo79X5AP_&-?+VAaEliUo5}KomZhuSC^jDs%|32&x-IVGSq>WMm?Npx&4v4IVWH zV^oO{@YPI3Y90nfMZ_FY0#IL%5UIGy7|VbnsHol;+2HDo00;~*z~7fo>EnVGCyGK~ z3|WzXju~B&nxj-Kf}#i!{(HepDW#ssnmrU_6f_V;{c`&WDMG2*07b v(@LIMomTYYTm018wr{*x+-Iho4vCnruy9eY#}E9UPn z *zq@@(nl|U!eE+@H7?-Ad1y)cv zAe;dJ05A&xodGI506YLbkvy45C8H}LDi&?YU=j&z0KY63uRp+W?-?j=;XQg7=sfjA z-ZcXQ@4z&@VmUGZlgEdST-TNUg0F8TA5_hxm2)4WA6E@-g-C)vOj#cus@NP~x?O+( z{^du1{zz9oYF Cr@e`yD^tr>0v(57%@1oqt)NRMV-kv41oK+o;#s?Lm_ke~1;$-jN@ z8g){(Nm9FaX74V)_-Bv$R>bkdH52wfbd+LpX$A1@A6P-XN30(I=l*U# d%dOl<#BVQnxzP~Z622^^_>oI z!|bW _+r6S zS*q4E$LK>o7G>H)8>a|bh6<4!sdtqJRj!@CCqk{0RI{Ynu0kzRv{Y&oD!EkZAhDBF zbCJP1MMsFuw&Rzozid5gS6rzYm~G5|f;w@`tW_s<;Hnx&OhiPPxKmZ3bb_i`ei7T^ zd$R<{hg!9ZNE>yVij%ZEE*5N$!vXS1 6Drc> z%?g_5q{@O$s72NCk2P)Ed}#5ilaNjj=vn?1MZIsio{*g|kW#u$^}G} !@{4A6PMk`_>pfak;)wT6S>En*DkH?*;%?P&gnK0ssIo4FH`1 zDm(x@06vX4mq)*~KcOxeEmQCjiEIXNV}L-p`T+g_br@jjfT iOn?qBC& zwgb!u>rbQy>j$_GH%_5%Ko8&_>b#8p3_p1NFalv&d<5Em6Bc2fAX(`V$3TT_0h}n) zM<5Esm;nCognc#r&g_slgs~0#jlhy1fX{*>+!k$5J-X+q6XAEH%!2B93pM=&0zwlE z{?!~HYRv3$F&5jvY1p46p)V=e?+G9F)jg{oE3Kt`KB>4V+YeLsxN>X kzpJY3g^7} z`eXtCu40!b-GWKp-hM0~oP4K#0Irv3|8ZIP93|y;=LrseBF5;)_U(76wf2)Jhzmvj z%4$1Peh#(^=NmspuhqXb-(M@v@NaL+pV#T6-%AKx9)zn&j~l?tB@a;u@VhP9`p4BM z(4=H(K@}53)(I0Rcj*lNv8f+&MIL#`n8)dOEOmSm@)X1?1B=OjT-o%3^%5jED}XJ@ zOv^+CWa``q$*buRU(JzeU=IeR?wn626j(L?eyI%k#<+Ta=6yT~=$?Hqt#DFFFFE #F9FAFA #528AFF +#EFEFEF #FF666666 #FF576FFF #FF7685D6 diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java index 48e9cc32..ae67e14e 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/login/activity/ImproveInfoActivity.java @@ -22,6 +22,7 @@ import com.xscm.moduleutil.utils.DateSelectDialog; import com.xscm.moduleutil.utils.GlideEngine; import com.xscm.moduleutil.utils.ImageLoader; import com.xscm.moduleutil.utils.ImageUtils; +import com.xscm.moduleutil.utils.PermissionDescriptionHelper; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.widget.Constants; @@ -200,6 +201,7 @@ public class ImproveInfoActivity extends BaseMvpActivitygrantedList, List deniedList) { + PermissionDescriptionHelper.removePermissionDescription((ViewGroup) mBinding.getRoot()); if (allGranted) { // Toast.makeText(MainActivity.this, "GPS权限已授予,可开始定位", Toast.LENGTH_SHORT).show(); initLocation(); // 启动GPS定位逻辑 @@ -515,6 +520,82 @@ public class MainActivity extends BaseMvpActivity { + // 用户点击同意后,请求权限 + directlyRequestPermissions(); + }) + .setNegativeButton("取消", (dialog, which) -> { + // 处理用户取消的情况 + }) + .show(); + } + + private void directlyRequestPermissions() { + String[] permissionsToRequest; + + // 根据Android版本决定请求的权限 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + // Android 10 (API 29) 及以上,可以同时请求前台和后台定位权限(注意:在Android 11及以后,策略有变) + permissionsToRequest = new String[] { + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + // 在Android 11上,不建议在此同时申请后台权限 + }; + } else { + // Android 9及以下 + permissionsToRequest = new String[] { + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + }; + } + + ActivityCompat.requestPermissions( + this, + permissionsToRequest, + REQUEST_CODE_LOCATION_PERMISSION // 定义你的请求码,例如 1001 + ); + } + + + private void performLocationTask() { + // 执行定位任务 + initLocation(); + } + + private void handlePermissionDenial() { + // 处理权限被拒绝的情况 + Toast.makeText(this, "位置权限被拒绝,相关功能无法使用", Toast.LENGTH_SHORT).show(); + } + @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent(UnreadCountEvent event) { long aLong = event.getALong(); diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java index 1fd1e4e6..8a10f20d 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/plaza/activity/ReleaseActivity.java @@ -9,6 +9,7 @@ import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; @@ -37,6 +38,7 @@ import com.xscm.moduleutil.bean.HeatedBean; import com.xscm.moduleutil.color.ThemeableDrawableUtils; import com.xscm.moduleutil.utils.ColorManager; import com.xscm.moduleutil.utils.GlideEngine; +import com.xscm.moduleutil.utils.PermissionDescriptionHelper; import com.xscm.moduleutil.utils.location.LocationProvider; import com.xscm.moduleutil.utils.location.LocationServiceFactory; import com.xscm.moduleutil.widget.Constants; @@ -141,7 +143,7 @@ public class ReleaseActivity extends BaseMvpActivity (), override fun initData() { if (!EasyPermissions.hasPermissions(this, *permissions)) { + PermissionDescriptionHelper.addPermissionDescription( + false, + mBinding?.root as ViewGroup, + permissions + ) EasyPermissions.requestPermissions( this, "请开启录音使用权限", 1, *permissions @@ -2350,10 +2356,6 @@ class RoomActivity : BaseMvpActivity (), addActiveDialogFragment(fragment) // 添加到管理列表 } } else if (id == R.id.rl_misc) { //设置点歌 - if (mRoomInfoResp!!.room_info.label_id == "1") { - queren() - } else { -// RequestDialogFragment.show(roomId, mRoomInfoResp, 1, getSupportFragmentManager()); val fragment = RequestDialogFragment.show( roomId, mRoomInfoResp, 1, supportFragmentManager @@ -2361,7 +2363,6 @@ class RoomActivity : BaseMvpActivity (), if (fragment != null) { addActiveDialogFragment(fragment) // 添加到管理列表 } - } } else if (id == R.id.rl_gift) { //礼物 val fragment = RoomGiftDialogFragment.show( mRoomInfoResp, null, roomId, 0, "", @@ -2642,15 +2643,16 @@ class RoomActivity : BaseMvpActivity (), } fun setRoleType(roleType: Int, pit_number: Int) { - val rl_voice = mBinding?.rlVoive // 注意:原拼写错误已修正 喇叭 - val rl_mic = mBinding?.rlMic//麦克风 - val rl_more = mBinding?.rlMore //PK - val rl_misc = mBinding?.rlMisc //音乐 + val rl_voice = mBinding?.rlVoive // 喇叭 + val rl_mic = mBinding?.rlMic // 麦克风 + val rl_more = mBinding?.rlMore // PK按钮 + val rl_misc = mBinding?.rlMisc // 音乐按钮 + val rl_message = mBinding?.rlMessage // 消息按钮 rl_voice?.visibility = View.GONE + rl_mic?.visibility = View.GONE rl_more?.visibility = View.GONE rl_misc?.visibility = View.GONE - rl_mic?.visibility = View.GONE // 空指针保护 if (mRoomInfoResp == null || mRoomInfoResp!!.room_info == null || mRoomInfoResp!!.user_info == null) { @@ -2661,83 +2663,99 @@ class RoomActivity : BaseMvpActivity (), val labelId = mRoomInfoResp!!.room_info.label_id val userPitNumber = mRoomInfoResp!!.user_info.pit_number - // 特殊房间类型处理(优先级最高) + // 情况1: typeId = 6 时,只显示消息按钮 if ("6" == typeId) { - mBinding?.rlMessage?.visibility = View.GONE - return // 全部隐藏,无需继续处理 + rl_message?.visibility = View.GONE + return } else { - mBinding?.rlMessage?.visibility = View.VISIBLE + rl_message?.visibility = View.VISIBLE } // 根据角色类型显示按钮 when (roleType) { 1, 2, 3 -> { + // 角色类型1,2,3显示全部按钮(但受其他条件限制) rl_voice?.visibility = View.VISIBLE - rl_mic?.visibility = - if (pit_number != 0) View.VISIBLE else View.GONE - rl_more?.visibility = - if (pit_number == 9) View.VISIBLE else View.GONE - rl_misc?.visibility = View.VISIBLE + + // 麦克风显示条件 + if (userPitNumber != 0) { + rl_mic?.visibility = View.VISIBLE + } + + // PK按钮显示条件:typeId=1且labelId=1且userPitNumber=9 + if ("1" == typeId && "1" == labelId && userPitNumber == 9) { + rl_more?.visibility = View.VISIBLE + } + + // 音乐按钮不显示 + rl_misc?.visibility = View.GONE } 0 -> { + // 角色类型0显示喇叭和麦克风 rl_voice?.visibility = View.VISIBLE - rl_mic?.visibility = - if (pit_number != 0) View.VISIBLE else View.GONE - rl_misc?.visibility = View.VISIBLE + + // 麦克风显示条件 + if (userPitNumber != 0) { + rl_mic?.visibility = View.VISIBLE + } + + rl_misc?.visibility = View.GONE } 5 -> { + // 角色类型5只显示喇叭 rl_voice?.visibility = View.VISIBLE rl_more?.visibility = View.GONE - rl_misc?.visibility = View.VISIBLE + rl_misc?.visibility = View.GONE } - else -> {} - } - if (roleType != 5) { - rl_misc?.visibility = View.VISIBLE - if (userPitNumber == 9) { - rl_more?.visibility = View.VISIBLE + else -> { + // 其他角色类型不显示任何功能按钮 } } - // label_id 和 type_id 联合判断 - if (mutableListOf ("1").contains(typeId) && "1" == labelId) { - rl_more?.visibility = View.VISIBLE - rl_misc?.visibility = View.VISIBLE - } else { - rl_more?.visibility = View.GONE - rl_misc?.visibility = View.GONE - } - - // mic 显示逻辑 - if (userPitNumber > 0) { - rl_mic?.visibility = View.VISIBLE - if (CommonAppContext.getInstance().isMai) { - switchMic(1) - } else { - switchMic(2) - } - } else { - if (pit_number == 888) { + // 情况3: 麦克风的特殊显示逻辑 + when { + userPitNumber > 0 -> { rl_mic?.visibility = View.VISIBLE - switchMic(2) - } else if (pit_number == -1) { - rl_mic?.visibility = View.VISIBLE // 原代码此处缺少 View. 前缀,已补全 - switchMic(1) - } else { + if (CommonAppContext.getInstance().isMai) { + switchMic(1) // 打开麦克风 + } else { + switchMic(2) // 关闭麦克风 + } + } + + pit_number == 888 -> { + rl_mic?.visibility = View.VISIBLE + switchMic(2) // 关闭麦克风 + } + + pit_number == -1 -> { + rl_mic?.visibility = View.VISIBLE + switchMic(1) // 打开麦克风 + } + + else -> { rl_mic?.visibility = View.GONE - switchMic(2) + switchMic(2) // 关闭麦克风 } } - + // 情况4: 特殊typeId隐藏PK和音乐按钮 if ("7" == typeId || "2" == typeId) { rl_more?.visibility = View.GONE rl_misc?.visibility = View.GONE } + // 最终确认:typeId不等于1的情况,都不展示PK按钮 + if ("1" != typeId) { + rl_more?.visibility = View.GONE + } + + if ("1"==typeId && "2" == labelId){ + rl_misc?.visibility = View.VISIBLE + } } fun isMute(is_mute: Int) { @@ -3818,12 +3836,12 @@ class RoomActivity : BaseMvpActivity (), } if (roomFragment == null) { - roomFragment = RoomFragment.newInstance(this,mRoomInfoResp) + roomFragment = RoomFragment.newInstance(this, mRoomInfoResp) supportFragmentManager .beginTransaction() .replace(R.id.vp_room_pager, roomFragment!!) .commitAllowingStateLoss() - }else { + } else { roomFragment!!.refreshData(mRoomInfoResp, qxType) } } @@ -4152,12 +4170,14 @@ class RoomActivity : BaseMvpActivity (), } override fun onPermissionsGranted(requestCode: Int, perms: List ) { + PermissionDescriptionHelper.removePermissionDescription(mBinding?.root as ViewGroup) if (perms.contains(Manifest.permission.RECORD_AUDIO)) { Log.d("Permission", "录音权限已授权") } } override fun onPermissionsDenied(requestCode: Int, perms: List ) { + PermissionDescriptionHelper.removePermissionDescription(mBinding?.root as ViewGroup) if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { AppSettingsDialog.Builder(this).build().show() } else { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/contacts/RoomSettingContacts.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/contacts/RoomSettingContacts.java index db57b583..ea0804c9 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/contacts/RoomSettingContacts.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/contacts/RoomSettingContacts.java @@ -18,5 +18,7 @@ public class RoomSettingContacts { void changeRoom(String roomId, String userId, int position, RoomSettingBean bean); void changeRoomType(String roomId,String type);//修改房间类型 type:1点唱、2拍卖、3男神、4女神 + + void agreeSong(String roomId, String type); } } diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java index 5825232c..f483c28b 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/FriendshipRoomFragment.java @@ -457,17 +457,15 @@ public class FriendshipRoomFragment extends BaseRoomFragment pitArr) { // 使用实际的麦位模型类 - boolean isHaveMe = false; - if (myPitNumber == 9 || myPitNumber == 10) { - isHaveMe = true; - } else { - myPitNumber = -1; - } + boolean isHaveMe = myPitNumber == 9 || myPitNumber == 10; // 更新麦位显示 for (RoomPitBean pitBean : pitArr) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java index 2376cef1..d57cdfc0 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/room/fragment/RankingChildFragment.java @@ -171,7 +171,7 @@ public class RankingChildFragment extends BaseMvpFragment adapter; + VolumeManager volumeManager ; + public RoomKtvFragment() {} public RoomKtvFragment(RoomInfoResp roomInfoResp) { this.roomInfoResp = roomInfoResp; @@ -129,8 +134,9 @@ public class RoomKtvFragment extends BaseMvpFragment (R.layout.item_room_charm_rank) { @@ -449,25 +489,25 @@ public class RoomKtvFragment extends BaseMvpFragment () { + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(String s) { + } + }); + } + } diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/AlbumDetailActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/AlbumDetailActivity.java index 99eabe3f..88c31235 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/AlbumDetailActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/AlbumDetailActivity.java @@ -35,6 +35,7 @@ import com.xscm.moduleutil.bean.AlbumBean; import com.xscm.moduleutil.utils.ARouteConstants; import com.xscm.moduleutil.utils.GlideEngine; import com.xscm.moduleutil.utils.ImageUtils; +import com.xscm.moduleutil.utils.PermissionDescriptionHelper; import com.xscm.moduleutil.utils.SpUtil; import com.xscm.moduleutil.widget.Constants; import com.xscm.modulemain.dialog.ShareDialog; @@ -184,27 +185,16 @@ public class AlbumDetailActivity extends BaseMvpActivity dataSource, int requestCode) { diff --git a/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java b/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java index 368e0fee..b6d4f9a4 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java +++ b/modulemain/src/main/java/com/xscm/modulemain/activity/user/activity/SettingActivity.java @@ -2,6 +2,7 @@ package com.xscm.modulemain.activity.user.activity; import android.content.DialogInterface; import android.content.Intent; +import android.os.Handler; import android.view.View; import androidx.appcompat.app.AlertDialog; @@ -14,6 +15,7 @@ import com.xscm.modulemain.databinding.ActivitySettingBinding; import com.xscm.modulemain.activity.user.conacts.SettingConacts; import com.xscm.modulemain.activity.user.presenter.SettingPresenter; import com.xscm.modulemain.BaseMvpActivity; +import com.xscm.modulemain.dialog.YouthModelDialog; import com.xscm.moduleutil.base.CommonAppContext; import com.xscm.moduleutil.dialog.RealNameDialog; import com.xscm.moduleutil.utils.ARouteConstants; @@ -29,6 +31,16 @@ import com.xscm.moduleutil.widget.CommonAppConfig; */ public class SettingActivity extends BaseMvpActivity implements SettingConacts.View { + private int clickCount = 0; + private static final int REQUIRED_CLICKS = 6; + private Handler handler = new Handler(); + private Runnable resetRunnable = new Runnable() { + @Override + public void run() { + clickCount = 0; // 自动重置计数器 + } + }; + private static final long RESET_DELAY = 1000; // 1秒无操作自动重置 protected void initData() { mBinding.tvBbh.setText(CommonAppConfig.getInstance().getVersion()); @@ -54,11 +66,13 @@ public class SettingActivity extends BaseMvpActivity = REQUIRED_CLICKS) { + // 写入内存值 + SpUtil.setShelf(0); + clickCount = 0; + ToastUtils.showShort("已经打开趣味玩法"); + } else { + // 延迟重置计数器 + handler.postDelayed(resetRunnable, RESET_DELAY); + } + } } } + private void showYouthModelDialog() { + YouthModelDialog youthModelDialog = new YouthModelDialog(this, null); + youthModelDialog.show(); + youthModelDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + // 记录已经显示过青少年模式弹窗 + dialog.dismiss(); + + } + }); + } @Override protected int getLayoutId() { return R.layout.activity_setting; diff --git a/modulemain/src/main/java/com/xscm/modulemain/adapter/RoomSettingAdapter.java b/modulemain/src/main/java/com/xscm/modulemain/adapter/RoomSettingAdapter.java index 389ae9f0..54c002a1 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/adapter/RoomSettingAdapter.java +++ b/modulemain/src/main/java/com/xscm/modulemain/adapter/RoomSettingAdapter.java @@ -57,6 +57,8 @@ public class RoomSettingAdapter extends BaseMultiItemQuickAdapter giftLabelBeans) { + if (giftLabelBeans == null) return; giftLabelBeanList = new ArrayList<>(); giftLabelBeanList.addAll(giftLabelBeans); GiftLabelBean giftLabelBean = new GiftLabelBean(); giftLabelBean.setId("0"); giftLabelBean.setName("背包"); giftLabelBeans.add(0, giftLabelBean); + + if (SpUtil.getShelf()==1){ + for (GiftLabelBean giftLabelBean1 : giftLabelBeans){ + if (giftLabelBean1.getId().equals("2")){ + giftLabelBeans.remove(giftLabelBean1); + break; + } + } + } + mBinding.viewPager.setAdapter(new MyFragmentPagerAdapter(getChildFragmentManager(), giftLabelBeans, fragmentList, roomId)); mBinding.viewPager.setOffscreenPageLimit(0); mBinding.slidingTabLayout.setViewPager(mBinding.viewPager); diff --git a/modulemain/src/main/java/com/xscm/modulemain/dialog/RoomSettingFragment.java b/modulemain/src/main/java/com/xscm/modulemain/dialog/RoomSettingFragment.java index c2e7e5bb..c4e2ff6f 100644 --- a/modulemain/src/main/java/com/xscm/modulemain/dialog/RoomSettingFragment.java +++ b/modulemain/src/main/java/com/xscm/modulemain/dialog/RoomSettingFragment.java @@ -139,8 +139,9 @@ public class RoomSettingFragment extends BaseMvpDialogFragment { - // 点击“确认”按钮时执行删除操作 - MvpPre.changeRoomType(roomId, type); + if (type.equals("-1")) { + MvpPre.agreeSong(roomId,"1"); + } else + // 点击“确认”按钮时执行删除操作 + MvpPre.changeRoomType(roomId, type); + }, v -> { // 点击“取消”按钮时什么都不做 @@ -360,11 +369,11 @@ public class RoomSettingFragment extends BaseMvpDialogFragment + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tool="http://schemas.android.com/tools"> @@ -216,7 +217,7 @@ android:background="@drawable/bg_r100_hui" android:gravity="center" android:singleLine="true" - android:text="2001" + tool:text="2001" android:textColor="@color/black" android:textSize="16sp" android:textStyle="bold" /> @@ -241,7 +242,7 @@ android:background="@drawable/bg_r100_hui" android:gravity="center" android:singleLine="true" - android:text="12" + tool:text="12" android:textColor="@color/black" android:textSize="16sp" android:textStyle="bold" /> @@ -266,7 +267,7 @@ android:background="@drawable/bg_r100_hui" android:gravity="center" android:singleLine="true" - android:text="1" + tool:text="1" android:textColor="@color/black" android:textSize="16sp" android:textStyle="bold" /> diff --git a/modulemain/src/main/res/layout/activity_release.xml b/modulemain/src/main/res/layout/activity_release.xml index 657e8489..385b973e 100644 --- a/modulemain/src/main/res/layout/activity_release.xml +++ b/modulemain/src/main/res/layout/activity_release.xml @@ -8,116 +8,124 @@ - \ No newline at end of file diff --git a/modulemain/src/main/res/layout/activity_setting.xml b/modulemain/src/main/res/layout/activity_setting.xml index 04cc5631..09083af9 100644 --- a/modulemain/src/main/res/layout/activity_setting.xml +++ b/modulemain/src/main/res/layout/activity_setting.xml @@ -53,7 +53,6 @@ android:id="@+id/ll_youth" style="@style/My_Info_Item_LL_Style" android:background="@drawable/bg_r15_white" - android:visibility="gone" >+ android:layout_height="match_parent"> - + + ++ android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent"> - -+ android:layout_height="match_parent" + android:background="@color/color_FFF8F8F8"> - - - - -- - - - - + android:id="@+id/tv_fb" + android:layout_width="match_parent" + android:layout_height="@dimen/dp_42" + android:layout_marginStart="@dimen/dp_38" + android:layout_marginTop="@dimen/dp_20" + android:layout_marginEnd="@dimen/dp_38" + android:background="@drawable/cs" + android:gravity="center" + android:text="立即发布" + android:textColor="@color/color_FF333333" + android:textSize="@dimen/sp_14" + app:layout_constraintTop_toBottomOf="@+id/rv_photo_wall"/> -+ android:layout_height="wrap_content" + android:background="@color/white" + app:layout_constraintTop_toTopOf="parent"/> + + + + + ++ + + + + + ++ + + - - - - - + android:src="@mipmap/accompany_off"/> @@ -228,7 +228,7 @@ android:layout_gravity="center" android:gravity="center" android:text="打赏" - android:textColor="@color/colorPrimary" + android:textColor="@color/color_EFEFEF" android:textSize="@dimen/sp_10"/> @@ -241,8 +241,8 @@ android:orientation="vertical"> @@ -252,12 +252,12 @@ android:layout_gravity="center" android:gravity="center" android:text="切歌" - android:textColor="@color/colorPrimary" + android:textColor="@color/color_EFEFEF" android:textSize="@dimen/sp_10"/> diff --git a/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIC2CChatFragment.java b/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIC2CChatFragment.java index 9eda3f1a..8b584fee 100644 --- a/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIC2CChatFragment.java +++ b/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/page/TUIC2CChatFragment.java @@ -1,28 +1,21 @@ package com.tencent.qcloud.tuikit.tuichat.classicui.page; -import android.content.Intent; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.Nullable; -import com.tencent.qcloud.tuicore.TUIConstants; -import com.tencent.qcloud.tuicore.TUICore; -import com.tencent.qcloud.tuicore.interfaces.TUIExtensionEventListener; -import com.tencent.qcloud.tuicore.interfaces.TUIExtensionInfo; -import com.tencent.qcloud.tuicore.interfaces.TUIValueCallback; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.google.gson.Gson; import com.tencent.qcloud.tuikit.tuichat.R; -import com.tencent.qcloud.tuikit.tuichat.TUIChatConstants; import com.tencent.qcloud.tuikit.tuichat.bean.C2CChatInfo; -import com.tencent.qcloud.tuikit.tuichat.bean.ChatInfo; import com.tencent.qcloud.tuikit.tuichat.presenter.C2CChatPresenter; import com.tencent.qcloud.tuikit.tuichat.presenter.FriendProfilePresenter; import com.tencent.qcloud.tuikit.tuichat.util.TUIChatLog; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; public class TUIC2CChatFragment extends TUIBaseChatFragment { private static final String TAG = TUIC2CChatFragment.class.getSimpleName(); @@ -63,38 +56,89 @@ public class TUIC2CChatFragment extends TUIBaseChatFragment { } private void setTitleBarExtension() { - titleBar.getRightGroup().setVisibility(View.GONE); + titleBar.getRightGroup().setVisibility(View.VISIBLE); titleBar.setRightIcon(R.drawable.chat_title_bar_more_menu_icon); titleBar.setOnRightClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - Map + android:src="@mipmap/muisc_tyt"/> param = new HashMap<>(); - param.put(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.USER_ID, chatInfo.getId()); - List extensionInfoList = - TUICore.getExtensionList(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.CLASSIC_EXTENSION_ID, param); - if (!extensionInfoList.isEmpty()) { - Collections.sort(extensionInfoList, new Comparator () { - @Override - public int compare(TUIExtensionInfo o1, TUIExtensionInfo o2) { - return o2.getWeight() - o1.getWeight(); - } - }); - TUIExtensionInfo extensionInfo = extensionInfoList.get(0); - TUIExtensionEventListener eventListener = extensionInfo.getExtensionListener(); - if (eventListener != null) { - Map map = new HashMap<>(); - map.put(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.USER_ID, chatInfo.getId()); - map.put(TUIChatConstants.CHAT_BACKGROUND_URI, mChatBackgroundThumbnailUrl); - eventListener.onClicked(map); - } - } else { - String userId = chatInfo.getId(); - openFriendProfile(userId); - } +// Map param = new HashMap<>(); +// param.put(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.USER_ID, chatInfo.getId()); +// List extensionInfoList = +// TUICore.getExtensionList(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.CLASSIC_EXTENSION_ID, param); +// if (!extensionInfoList.isEmpty()) { +// Collections.sort(extensionInfoList, new Comparator () { +// @Override +// public int compare(TUIExtensionInfo o1, TUIExtensionInfo o2) { +// return o2.getWeight() - o1.getWeight(); +// } +// }); +// TUIExtensionInfo extensionInfo = extensionInfoList.get(0); +// TUIExtensionEventListener eventListener = extensionInfo.getExtensionListener(); +// if (eventListener != null) { +// Map map = new HashMap<>(); +// map.put(TUIConstants.TUIChat.Extension.ChatNavigationMoreItem.USER_ID, chatInfo.getId()); +// map.put(TUIChatConstants.CHAT_BACKGROUND_URI, mChatBackgroundThumbnailUrl); +// eventListener.onClicked(map); +// } +// } else { +// String userId = chatInfo.getId(); +// openFriendProfile(userId); +// } + + // 显示默认菜单,包含举报功能 + showReportPopupMenu(v); } }); } + private void showReportPopupMenu(View anchorView) { + // 创建 PopupMenu 或自定义 PopupWindow + android.widget.PopupMenu popupMenu = new android.widget.PopupMenu(getContext(), anchorView); + // 添加举报选项 + popupMenu.getMenu().add("举报"); + + // 设置点击监听 + popupMenu.setOnMenuItemClickListener(new android.widget.PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(android.view.MenuItem item) { + if ("举报".equals(item.getTitle())) { + ARouter.getInstance().build("/moduleUtil/WebViewActivity").withString("url", "https://vespa.qxyushen.top/h5/web/index.html#/pages/feedback/report?id=?id="+getToken()+"&fromType=1&fromId="+ getUserInfo().getUser_id()).navigation(); + return true; + } + return false; + } + }); + + popupMenu.show(); + } + + private String getToken(){ + SharedPreferences sp = getContext().getSharedPreferences("Vespa", Context.MODE_PRIVATE); + return sp.getString("token",""); + } + private UserInfo getUserInfo(){ + SharedPreferences sp = getContext().getSharedPreferences("Vespa", Context.MODE_PRIVATE); + String s= sp.getString("userInfo",""); + if (TextUtils.isEmpty(s)){ + return null; + } + Gson Gson = new Gson(); + UserInfo userInd =Gson.fromJson(s, UserInfo.class); + return userInd; + + } + + public static class UserInfo { + String user_id; + + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + } private void openFriendProfile(String userId) { // Intent intent = new Intent(getContext(), FriendProfileActivity.class); // intent.putExtra(TUIConstants.TUIChat.CHAT_ID, userId); diff --git a/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/widget/input/InputView.java b/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/widget/input/InputView.java index df15c8f3..35612977 100644 --- a/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/widget/input/InputView.java +++ b/tuichat/src/main/java/com/tencent/qcloud/tuikit/tuichat/classicui/widget/input/InputView.java @@ -227,7 +227,15 @@ public class InputView extends LinearLayout implements View.OnClickListener, Tex public class userInd{ private int is_can_chat;//是否可以私聊,1:可以,0:不可以 private int can_chat_money;//需要充值的金额 + private int userId; + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } public int getIs_can_chat() { return is_can_chat; }