[C#] Specifieke pagina/functionaliteit open in 3rd party app

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ThijsB_98
  • Registratie: September 2014
  • Laatst online: 12-01-2021
Momenteel ben ik voor een schoolproject bezig met het ontwikkelen van een xamarin android applicatie die een andere apps kan aanroepen. Een soort hub tussen vele apps.

Op het internet staan weinig voorbeelden van hoe dit daadwerkelijk gerealiseerd wordt. En als er dan iets te vinden is, dan is het gericht op Xamarin.Forms (die ik niet gebruik en niet kan gebruiken (requirements |:( )

Ik heb nu dat ik met een interactie een externe applicatie kan openen (bijvoorbeeld Youtube), zie onderstaande code.
code:
1
2
Intent intent = PackageManager.GetLaunchIntentForPackage("com.google.android.youtube");
StartActivity(intent);


De twee problemen waar ik nu tegen aanloop:
  1. Hoe kan ik de correcte URL/URI achterhalen van een 3rd party app?
  2. Hoe kan ik een pagina/functionaliteit binnen een 3rd party app openen?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Zerone
  • Registratie: Januari 2019
  • Laatst online: 03-02 20:12
Dit gaat enkel via API's en je zult dus de API van elke 3rd party app die jij wilt aanspreken nodig hebben.
Veel apps gaan zelfs geen API's ter beschikking stellen. Als dit al bestaat voor android apps tenminste want hier ben ik zelf niet zeker van.

Stel dat dit mogelijk is en youtube een API heeft dan kan je enkel de functies aanspreken die ze hierin vrijgegeven hebben.

Het starten van een externe app zoals jij aangeeft gaat wel omdat android een functie heeft gemaakt die jij kan aanroepen. Eigenlijk roep je daarmee de android API aan om het even simpel te maken.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
ThijsB_98 schreef op woensdag 29 mei 2019 @ 14:22:
Een soort hub tussen vele apps.
Android steekt zo in elkaar dat je juist vermijdt zelf een expliciete 'hub' aan apps op te zetten.
Je geeft op wat de gebruiker wil gaan doen en het systeem vogelt uit welke app daar bij past.

Dat mechanisme heet implicit intents.
Aan die intents kun je verschillende data payloads meegeven en adhv wat er in zit, en wat er op het device van je eindgebruiker geinstalleerd staat, matcht android de intent aan een specifieke app activity en lanceert die. (En als er meerdere mogelijk zijn krijgt de gebruiker een keuze menu.)

Beetje zoals Windows ook werkt met file-type associations en default programs.

Je kunt wel hard een koppeling naar een specifieke activity opgeven, mits je de package en class name kent. Dat heet een explicit intent. Die zijn eigenlijk alleen bedoeld om te navigeren tussen verschillende activities binnen je eigen app apk. Waar jij ook zelf weet welke payload aan de intent meegegeven kan worden.

Het is op zeer specifieke situaties na ("ik wil deze app en alleen deze app openen") niet de bedoeling om explicit intents naar buiten je eigen app op te zetten. En als je het toch gaat doen, dan ben je - heb je al gemerkt - ook 100% zelf verantwoordelijk om uit te vogelen welke data ze verwachten mee te krijgen en in welke vorm.
ThijsB_98 schreef op woensdag 29 mei 2019 @ 14:22:

Op het internet staan weinig voorbeelden van hoe dit daadwerkelijk gerealiseerd wordt.
De Google developer reference geeft je al heldere native Android voorbeelden.

Vandaar alleen nog vinden wat het Xamarin Android equivalent is en dat is dus zoiets:

YouTube: [AND102] Create an Explicit Intent and Start an Acitivity with Xamarin Android
YouTube: [AND102] Implicit Intent Examples


Maar nogmaals: dit soort app launchers zijn een anti-pattern.
Fijn dat je dit voor een schoolopdracht moet doen, maar dat mag je daarna weer vergeten en nooit in de praktijk toe gaan passen.

[ Voor 102% gewijzigd door R4gnax op 06-06-2019 19:25 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
In het geval van Youtube is het ook een idee om gewoon via een intent de deep-link URL te openen, Youtube installeert zelf een URL handler die een gebruiker weer kan kiezen als standaard handler voor Youtube links. Voor mensen die dan geen Youtube hebben opent het dan gewoon in de browser.

Zo zijn er veel meer apps die gewoon URL handlers installeren ( Denk aan Facebook, maar ook de meest bank-apps voor ideal betalingen ).

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Woy schreef op donderdag 6 juni 2019 @ 20:07:
In het geval van Youtube is het ook een idee om gewoon via een intent de deep-link URL te openen, Youtube installeert zelf een URL handler die een gebruiker weer kan kiezen als standaard handler voor Youtube links. Voor mensen die dan geen Youtube hebben opent het dan gewoon in de browser.

Zo zijn er veel meer apps die gewoon URL handlers installeren ( Denk aan Facebook, maar ook de meest bank-apps voor ideal betalingen ).
Maar wat Google zelf eigenlijk wil zien is dat je een implicit intent bouwt, kijkt of deze een match heeft; en zo niet; dan pas terugvalt op een web-based optie middels een intent van het ACTION_VIEW type en een URL.

Werkt voor meer gevallen: voorrang wordt gegeven aan moderne apps die op de juiste manier registreren voor het afhandelen van implicit intents, en daarna is er een fallthrough naar een URL waarbij eerst nog apps die een URL handler geregistreerd hebben, tussen kunnen zitten voordat er echt een browser-venster geopend zou worden.

Drie-traps proces, dus. :)

[ Voor 5% gewijzigd door R4gnax op 06-06-2019 20:22 ]