// Store pending deep link
app.Get("/invite/:code", func(c *mizu.Ctx) error {
code := c.Param("code")
device := mobile.DeviceFromCtx(c)
// Generate unique tracking ID
trackingID := uuid.New().String()
// Store pending deep link
cache.Set(trackingID, &PendingDeepLink{
Path: "/invite/" + code,
CreatedAt: time.Now(),
DeviceInfo: device,
}, 24*time.Hour)
// Set cookie for web fallback
c.Cookie(&http.Cookie{
Name: "pending_deeplink",
Value: trackingID,
MaxAge: 86400,
Path: "/",
HttpOnly: true,
Secure: true,
})
// Try to open app
return mobile.DeepLinkHandler("myapp", "/install?track="+trackingID)(c)
})
// Called when app opens for first time
app.Get("/api/check-pending-deeplink", func(c *mizu.Ctx) error {
device := mobile.DeviceFromCtx(c)
// Find pending deep link for this device
pending, err := db.FindPendingDeepLink(device.DeviceID)
if err != nil || pending == nil {
return c.JSON(200, map[string]any{"found": false})
}
// Mark as claimed
db.ClaimPendingDeepLink(pending.ID)
return c.JSON(200, map[string]any{
"found": true,
"path": pending.Path,
})
})