Это приложение, которое использует WebView.
В настоящее время мой приоритет заключался в том, чтобы сделать загрузку, поэтому я еще не организовал код.
Я пытался загрузить приложение несколько раз в Google Play Console для внутреннего тестирования, но оно продолжает быть отвергнутым из -за того, что «схема намерения, похищающему». Они не указывают, в чем именно проблема. Какая часть вызывает проблему?android:usesCleartextTraffic="false"
Код, вызывающий проблему
class CustomWebViewClientV2(val mContext:Context, val mProgress: ProgressBar, val Callback: WebCallback) : WebViewClient() {
val TAG = "CustomWebViewClientV2"
override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
Log.e(TAG, "shouldOverrideUrlLoading11 $url")
return handleLoading_new(url)
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
Log.e(TAG, "shouldOverrideUrlLoading22")
val url = request?.url?.toString() ?: return false
return handleLoading_new(url)
}
private fun handleLoading_new(url: String): Boolean {
if (isIntent(url)) {
Log.e(TAG, "intent $url")
try {
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
if (url.contains("kakaolink")) {
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
} else {
val marketIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("market://details?id=com.kakao.talk")
).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
mContext.startActivity(marketIntent)
}
return true
} else {
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
return true
} else {
return false
}
}
} catch (e: Exception) {
e.printStackTrace()
return true
}
} else if (!url.startsWith("http://") && !url.startsWith("https://")) {
Log.e(TAG, "https No : $url")
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
} else {
Log.e(TAG, "NO : $url")
when {
url.contains("TESTURL") || url.contains("TESTURL3")
|| url.contains("accounts.google") || url.contains("x.com") || url.contains("twitter.com") -> {
if ((url.contains("x.com") || url.contains("twitter.com")) && url.contains("TESTURL")) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
`package` = "com.twitter.android"
}
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
} else {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
mContext.startActivity(browserIntent)
}
}
if (url.contains("TESTURL")) {
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
} else {
return false
}
}
url.contains("play.google.com/store") -> {
try {
Intent.parseUri(url, 0).apply {
setPackage("com.android.vending")
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
}
url.contains("TESTURL") || url.contains("link.coupang.com") -> {
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
}
else -> {
return false
}
}
}
}
private fun isIntent(url: String): Boolean{
return url.startsWith("intent://")
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
if(url == null) {
Log.e(TAG, "onPageStarted url is null")
return
}
Log.e(TAG, "onPageStarted :: $url")
(mContext as Activity).runOnUiThread {
Callback.Url(false, url)
mProgress.visibility = View.VISIBLE
}
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
if(url == null){
Log.e(TAG,"onPageFinished :: url is null")
return
}
Log.e(TAG,"onPageFinished :: $url")
if(url.startsWith("market://") || url.startsWith("coupang://")){
try{
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
}
}catch (e: Exception){
e.printStackTrace()
Log.e(TAG, "onPageFinished Exception :: $e")
}
}else {
Thread {
try {
CookieManager.getInstance().flush()
}catch (e: Exception){
Log.e(TAG,"CookieManager flush error :: ${e.message}")
}
}.start()
(mContext as Activity).runOnUiThread{
Callback.Url(true, url)
mProgress.visibility = View.GONE
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... e-is-probl
Приложение отклонилось из -за уязвимости схемы намерений - какая часть моего кода проблематична? ⇐ Android
Форум для тех, кто программирует под Android
1746665590
Anonymous
Это приложение, которое использует WebView.
В настоящее время мой приоритет заключался в том, чтобы сделать загрузку, поэтому я еще не организовал код.
Я пытался загрузить приложение несколько раз в Google Play Console для внутреннего тестирования, но оно продолжает быть отвергнутым из -за того, что «схема намерения, похищающему». Они не указывают, в чем именно проблема. Какая часть вызывает проблему?android:usesCleartextTraffic="false"
[b] Код, вызывающий проблему [/b]
class CustomWebViewClientV2(val mContext:Context, val mProgress: ProgressBar, val Callback: WebCallback) : WebViewClient() {
val TAG = "CustomWebViewClientV2"
override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean {
Log.e(TAG, "shouldOverrideUrlLoading11 $url")
return handleLoading_new(url)
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
Log.e(TAG, "shouldOverrideUrlLoading22")
val url = request?.url?.toString() ?: return false
return handleLoading_new(url)
}
private fun handleLoading_new(url: String): Boolean {
if (isIntent(url)) {
Log.e(TAG, "intent $url")
try {
val intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
if (url.contains("kakaolink")) {
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
} else {
val marketIntent = Intent(
Intent.ACTION_VIEW,
Uri.parse("market://details?id=com.kakao.talk")
).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
mContext.startActivity(marketIntent)
}
return true
} else {
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
return true
} else {
return false
}
}
} catch (e: Exception) {
e.printStackTrace()
return true
}
} else if (!url.startsWith("http://") && !url.startsWith("https://")) {
Log.e(TAG, "https No : $url")
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
} else {
Log.e(TAG, "NO : $url")
when {
url.contains("TESTURL") || url.contains("TESTURL3")
|| url.contains("accounts.google") || url.contains("x.com") || url.contains("twitter.com") -> {
if ((url.contains("x.com") || url.contains("twitter.com")) && url.contains("TESTURL")) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
`package` = "com.twitter.android"
}
if (intent.resolveActivity(mContext.packageManager) != null) {
mContext.startActivity(intent)
} else {
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}
mContext.startActivity(browserIntent)
}
}
if (url.contains("TESTURL")) {
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
} else {
return false
}
}
url.contains("play.google.com/store") -> {
try {
Intent.parseUri(url, 0).apply {
setPackage("com.android.vending")
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
}
url.contains("TESTURL") || url.contains("link.coupang.com") -> {
try {
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
return true
}
} catch (e: Exception) {
return false
}
}
else -> {
return false
}
}
}
}
private fun isIntent(url: String): Boolean{
return url.startsWith("intent://")
}
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
if(url == null) {
Log.e(TAG, "onPageStarted url is null")
return
}
Log.e(TAG, "onPageStarted :: $url")
(mContext as Activity).runOnUiThread {
Callback.Url(false, url)
mProgress.visibility = View.VISIBLE
}
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
if(url == null){
Log.e(TAG,"onPageFinished :: url is null")
return
}
Log.e(TAG,"onPageFinished :: $url")
if(url.startsWith("market://") || url.startsWith("coupang://")){
try{
Intent.parseUri(url, 0).apply {
addCategory(Intent.CATEGORY_BROWSABLE)
component = null
selector = null
}.run {
mContext.startActivity(this)
}
}catch (e: Exception){
e.printStackTrace()
Log.e(TAG, "onPageFinished Exception :: $e")
}
}else {
Thread {
try {
CookieManager.getInstance().flush()
}catch (e: Exception){
Log.e(TAG,"CookieManager flush error :: ${e.message}")
}
}.start()
(mContext as Activity).runOnUiThread{
Callback.Url(true, url)
mProgress.visibility = View.GONE
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79547855/app-rejected-due-to-intent-scheme-vulnerability-which-part-of-my-code-is-probl[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия