SDK de Android
Información general
El SDK de WAS VPS para Android incluye fragmentos Sceneform y utilidades de ciclo de vida para localizar a los usuarios en mapas VPS con dispositivos ARCore. Sigue el flujo al estilo Immersal: comprueba los requisitos, instala la dependencia, prepara el manifiesto y arranca el servicio.
Requisitos
- Android SDK mínimo 24 (Android 7.0)
- Dispositivo con soporte de ARCore
- Proyecto configurado con Kotlin (los ejemplos usan Kotlin)
¿Necesitas un API key? Consíguelo en space.web-ar.studio o escribe a support@webar3.com / support@web-ar.studio.
Instalar el SDK
-
Asegúrate de que tu proyecto use Maven Central:
allprojects {
repositories {
mavenCentral()
// otros repositorios…
}
} -
Añade la dependencia en el módulo de la app:
dependencies {
implementation "com.arstudio:wasvps-sdk:1.0.0"
} -
Sincroniza Gradle.
Configurar el manifiesto
Declara los requisitos de ARCore y, si es necesario, sobrescribe el SDK mínimo:
<!-- Permite WASVPS SDK con minSdk < 24 -->
<uses-sdk tools:overrideLibrary="com.arstudio.wasvps_sdk, com.google.ar.sceneform.sceneform, com.google.ar.sceneform.ux" />
<!-- Limita la instalación a dispositivos con ARCore (por defecto) -->
<uses-feature
android:name="android.hardware.camera.ar"
android:required="true" />
Para ampliar la instalación en Google Play, establece android:required="false" y conserva tools:replace="android:required".
Inicio rápido con WASVPSArFragment
Coloca el fragmento proporcionado en el layout de tu actividad:
<!-- res/layout/activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/vFragmentContainer"
android:name="com.arstudio.wasvps_sdk.ui.WASVPSArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportFragmentManager.beginTransaction()
.replace(R.id.vFragmentContainer, WASVPSArFragment())
.commit()
}
}
Obtén el servicio y comienza la localización cuando dispongas de Location ID:
val fragment = supportFragmentManager
.findFragmentById(R.id.vFragmentContainer) as WASVPSArFragment
val config = WASVPSConfig.getIndoorConfig(listOf("your-location-id"))
val service = fragment.vpsService
service.setVpsConfig(config)
service.setVpsCallback(object : VpsCallback {
override fun onSuccess() = Unit
override fun onFail() = Unit
override fun onStateChange(state: State) = Unit
override fun onError(error: Throwable) {
Log.e("VPS", "Localization error", error)
}
})
service.startVpsService()
Detén el servicio con service.stopVpsService() cuando la experiencia de AR se pause (por ejemplo en onPause).
Integración personalizada de fragmento
Si gestionas tu propio ArFragment o ArSceneView, inicializa WASVPSService manualmente:
class CustomArFragment : ArFragment() {
private val vpsService = WASVPSService.newInstance()
override fun onAttach(context: Context) {
super.onAttach(context)
WASVPSSdk.init(context.applicationContext)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vpsService.bindArSceneView(arSceneView)
vpsService.setVpsConfig(WASVPSConfig.getOutdoorConfig(listOf("location-id")))
}
override fun onResume() {
super.onResume()
vpsService.resume()
vpsService.startVpsService()
}
override fun onPause() {
vpsService.pause()
vpsService.stopVpsService()
super.onPause()
}
override fun onDestroyView() {
vpsService.destroy()
super.onDestroyView()
}
}
Anclar contenido
Coloca los nodos respecto a vpsService.worldNode. Los hijos de este nodo adoptan la pose global tras una localización exitosa.
val anchorNode = Node().apply {
setParent(vpsService.worldNode)
localPosition = Vector3(0f, 0f, -1f)
}
Solución de problemas
- Comprueba que Google Play Services for AR esté instalado y actualizado.
- Si la localización falla, valida tu API key, los Location ID y la configuración que envías al servicio.
- Revisa el módulo
/sampledel repositorio para ver el flujo completo, permisos y UI.