Spring til indhold

Sådan åbner man en dApp i Solana-mobilwallets

  • Kaizen wallet, black leather wallet, slim wallet
    Foto: kisetsuo / Pixabay
  • Mobile, smartphone, technology
    Foto: stylemotions / Pixabay

Brug erfaringen i dit system

Arbejdet bag »Sådan åbner man en dApp i Solana-mobilwallets« kan bidrage til din næste ændring. Vi kan undersøge lignende adfærd i din software, dine data eller din infrastruktur. Brugerflader, der indlæses hurtigt, virker på en telefon og opfører sig ens i alle de browsere, jeres kunder nu bruger.

Se vores ydelser Kontakt os

Følg ræsonnementet og dets grænser

Læs ræsonnementet og dets begrænsninger i noten. Vi kan teste, om samme diagnose holder i dit miljø. Har styret full‑stack‑udviklingen af GIS‑kort — full stack‑kortløsning, fra database til browser

Har styret full‑stack‑udviklingen af GIS‑kort Kontakt os

En React-dApp bygget på @solana/wallet-adapter-react forbinder desktop-wallets uden problemer, men på en telefon falder det samme flow fra hinanden: wallet’en skal åbne dApp’en i sin egen indbyggede browser, og de deeplinks, der skulle klare det, virker bare ikke. Backpack lander på en “hent appen”-side; Solflare åbner appen, men aldrig sitet; alle varianter ser ud til at fejle. Vi skilte problemet ad, og det viste sig at være fire adskilte problemer med ét fælles symptom.

De fire problemer

  • Backpack-linket var forkert bygget. Det eneste dokumenterede format er https://backpack.app/ul/v1/browse/<url>?ref=<ref> — et universelt link med mål-URL’en i stien og et påkrævet ref. Et gæt med eget skema som backpack://ul/v1/browse?url=... matcher ingen rute i appen, så brugeren ender på wallet’ens installationsside.
  • Solflare skal også bruge sit universelle link: https://solflare.com/ul/v1/browse/<url>?ref=<ref> — ikke det rå solflare://-skema. Et råt skema kan starte appen uden at dirigere den — hvilket er præcis “appen åbner, men site-fanen må åbnes manuelt”.
  • Begge parametre skal være kodet. url er dApp’ens fulde absolutte adresse, og ref er den kaldende origin, hver især gennem encodeURIComponent. Et ukodet ? eller & i målet ødelægger fortolkningen, og wallet’en åbner på sin forside i stedet for browserfanen.
  • Udløsningen betyder lige så meget som linket. Universelle links skifter kun app ved en navigation, styresystemet stoler på — og de gør med vilje ingenting, når de indsættes i adresselinjen, hvilket også er sådan, et helt korrekt link “fejler” under test.

De dokumenterede formater

  • Phantom: https://phantom.app/ul/browse/<url>?ref=<ref> — uden /v1 i netop dette.
  • Solflare: https://solflare.com/ul/v1/browse/<url>?ref=<ref>
  • Backpack: https://backpack.app/ul/v1/browse/<url>?ref=<ref>

Ét mønster dækker alle tre:

const WALLET_BROWSE = {
  phantom: (url, ref) =>
    `https://phantom.app/ul/browse/${url}?ref=${ref}`,
  solflare: (url, ref) =>
    `https://solflare.com/ul/v1/browse/${url}?ref=${ref}`,
  backpack: (url, ref) =>
    `https://backpack.app/ul/v1/browse/${url}?ref=${ref}`,
};

function walletBrowseLink(
  walletName,
  targetUrl = window.location.href,
) {
  const build = WALLET_BROWSE[walletName.toLowerCase()];
  if (!build) return null;
  return build(
    encodeURIComponent(targetUrl),
    encodeURIComponent(window.location.origin),
  );
}

Udløs linket, så iOS og Android accepterer det

  • Render et rigtigt anker, beregnet på forhånd. Et almindeligt <a href={walletBrowseLink('phantom')}> er den mest pålidelige udløser på begge platforme.
  • Skal det ske programmatisk, så tildel window.location.href synkront inde i tryk-handleren — ingen await, ingen fetch, ingen setTimeout først. Efter asynkront arbejde er gestus-konteksten væk, og iOS falder tilbage til wallet’ens websted. Aldrig window.open.
  • Test aldrig ved at indsætte i adresselinjen. Universelle links udløses med vilje ikke dér; test med et link, der trykkes på, eller en QR-kode, som kameraet scanner.
  • Pas på messenger-webviews. Åbnet i Telegrams eller Instagrams indbyggede browser bliver universelle links ofte slugt, og wallet’ens almindelige websted indlæses i stedet. User-agent-detektion er i bedste fald et gæt, så giv også brugerne en synlig nødudgang: “åbn i Safari eller Chrome, og forbind derefter”.

Den større løsning på Android

Håndbyggede deeplinks er iOS-historien. På Android lader Solana Mobiles Mobile Wallet Adapter en dApp i mobilbrowseren forbinde direkte til den installerede wallet-app, helt uden omvejen om den indbyggede browser. Nyere versioner af @solana/wallet-adapter-react registrerer mobiladapteren automatisk, så en opgradering af wallet-adapter-pakkerne kan i sig selv løse problemet på Android. Målarkitekturen: Mobile Wallet Adapter på Android, universelle browse-links på iOS, hvor Apple ikke tillader en tilsvarende løsning.

Efterprøv på en enhed

  1. Rigtig enhed, wallet installeret, link åbnet fra systembrowseren — ikke fra en messenger.
  2. Tryk på et renderet link, eller scan en QR-kode; indsæt aldrig i adresselinjen.
  3. Bekræft, at wallet’en åbner, og at dApp’en indlæses i dens indbyggede browserfane — anden halvdel er den, der fejler.
  4. Gentag uden wallet’en installeret: det universelle link skal falde tilbage til wallet’ens websted. Ser du dén side, mens appen er installeret, er linket eller udløsningen stadig forkert.
  5. Test derefter messenger-vejen, og tilføj “åbn i browser”-hjælpen, hvis den fejler dér.

Kilder

Engineer-maskotten: en venlig blå og hvid robot i en kappe med printbaner, der sidder med en bærbar på skødet og løfter en finger under en tændt pære Det er præcis den slags problemer, vi løser for vores kunder. Kontakt os.

Alle noter

Mål, før du ændrer

Medbring arbejdsgangen, de eksisterende grænseflader og de brugere, der har brug for ændringen. Vi kan definere en testbar leverance og en overdragelse, teamet kan vedligeholde.

Se, hvad det koster Kontakt os

Drøft dine observationer

Drøft »Sådan åbner man en dApp i Solana-mobilwallets« i forbindelse med dit eget projekt. Fortæl, hvad du har observeret, og hvad et nyttigt resultat ville være.

Se vores ydelser
welcome@engineer.company +45 50 10 61 84 København, Danmark
QR-kode til Sådan åbner man en dApp i Solana-mobilwallets
Tag denne side med dighttps://engineer.company/da/notes/solana-mobile-wallet-deeplinks/