Intents

Intro

БоставныС части

  • Component

  • Action

  • Extra data

Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² IPC для:

  • Запуска Activity (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для запуска UI)

  • Broadcast ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ систСмы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

  • Запуск/останов ΠΈ взаимодСйствиС с сСрвисами, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Π² background'Π΅

  • Доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‡Π΅Ρ€Π΅Π· ContentProvider

  • ΠΊΠ°ΠΊ callback для событий

Public and private component

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, доступныС Ρ‡Π΅Ρ€Π΅Π· Intents, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ public ΠΈΠ»ΠΈ private. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ зависит ΠΎΡ‚ intent-filter, ΠΈ Π»Π΅Π³ΠΊΠΎ, ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒ public. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, Π² манифСстС прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊΠ°ΠΊ android: exported = false.

Public ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² манифСстС, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹, поэтому любоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ. Если ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½Π΅Ρ‚ нСобходимости ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ всСм Π΄Ρ€ΡƒΠ³ΠΈΠΌ прилоТСниям, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ установки Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, объявлСнного Π² манифСстС.

Π”Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ общСдоступными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹.

Inter-app and Intra-app communications

Inter-app - ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями Intra-app - Π΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния

Explicit and Implicit

Explicit - ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Implicit - ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ всСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, intent-filter ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… зарСгистрирован Π² манифСстС (ΠΈ соотв Π² систСмС). Π’ этом случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±ΡƒΠ΄Π΅Ρ‚ прСдоставлСн Π²Ρ‹Π±ΠΎΡ€, ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π½Ρ‚. Implicit intent нСльзя ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сСрвису!

Π§Ρ‚ΠΎ Π±Ρ‹ implicit intent ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚ΠΈ (Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Π½Ρ‚Ρ‹), Π² Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° category="android.intent.category.DEFAULT"

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Π½ΠΈΡ… стоит Broadcast Intent - этот Ρ‚ΠΈΠΏ ΠΈΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠΉΠ΄Π΅Ρ‚ всСм Ρ‚Π°Ρ€Π³Π΅Ρ‚Π°ΠΌ, Π° Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ.

Security Mistakes

НС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· BroadcastIntent ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Explicit Intents

НС ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ intent-filter для своих сСрвисов: Π² этом случаС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ смоТСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ваши ΠΈΠ½Ρ‚Π΅Π½Ρ‚Ρ‹ (Ссли ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· broadcastintent?)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Запуск Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ прилоТСния

val intent_remote = Intent("${TARGET}.action.AUTH_REGISTRATION").apply {
    component = ComponentName(TARGET, "com.zfr.ctfzoneclient.service.view.AuthService")
    putExtra("USER_NAME", "testuser")
    putExtra("FIRST_NAME", "firstname_testuser")
    putExtra("LAST_NAME", "lastname_testuser")
    putExtra("PENDING_INTENT", pendingIntent)
}

Last updated