Skip to content
This repository was archived by the owner on Sep 10, 2026. It is now read-only.
This repository was archived by the owner on Sep 10, 2026. It is now read-only.

App Links: Support for FOSDEM Schedule app for Android #318

Description

@johnjohndoe

Context

  • Android allows to register apps as official apps for a website/domain.
  • Once the fosdem.org is prepared then apps can recognize a link to a session. When a user clicks such a link then the app can pick up this link and open the corresponding screen in the app.
  • There is two release signing keys because Google Play and F-Droid use different ones.
  • All that is needed from the FOSDEM website is to put a JSON file into a specific path:
    • https://fosdem.org/.well-known/assetlinks.json

assetlinks.json file

Please add the following file to the public directory /.well-known of the FOSDEM website:

[
    {
        "relation":
        [
            "delegate_permission/common.handle_all_urls"
        ],
        "target":
        {
            "namespace": "android_app",
            "package_name": "info.metadude.android.fosdem.schedule",
            "sha256_cert_fingerprints":
            [
                "89:4C:4F:D6:CB:AB:E4:C9:F9:2A:43:A8:25:E7:45:25:0A:17:7D:A0:1A:D0:30:1E:DD:22:3C:03:22:C7:C0:03",
                "FF:A0:BD:6F:43:2A:A8:B4:43:00:24:87:BC:73:27:70:7F:A4:E6:71:FC:8E:F4:51:59:C5:B6:AD:8B:9D:0F:E6"
            ]
        }
    },
    {
        "relation":
        [
            "delegate_permission/common.handle_all_urls"
        ],
        "target":
        {
            "namespace": "android_app",
            "package_name": "info.metadude.android.fosdem.schedule.debug",
            "sha256_cert_fingerprints":
            [
                "D8:E7:B5:B1:50:BB:1E:39:58:A8:AA:E9:95:09:92:68:74:DC:C5:03:79:E5:9C:FD:CC:9A:1B:43:4F:D0:F9:F6"
            ]
        }
    }
]

Related

Activity

  1. Wilm0r commented on Jan 18, 2026

    @Wilm0r
    Contributor

    Would this benefit all FOSDEM apps or just the one with package name info.metadude.android.fosdem?

  2. johnjohndoe commented on Jan 18, 2026

    @johnjohndoe
    ContributorAuthor

    Only that one for now. Feel free to add your SHA256 hashes. But for App Links to function correctly, you will need to configure your app further.

  3. johnjohndoe commented on Jan 24, 2026

    @johnjohndoe
    ContributorAuthor

    @gerryd Will the JSON file be deployed in time for FOSDEM 2026? Please note that mobile apps cannot be deployed on short notice due to the unforeseeable time taken by the stores.

  4. gerryd commented on Jan 24, 2026

    @gerryd
    Member

    @johnjohndoe I undortunately don't have time to check (impact etc) this right now; I pinged the co-maintainers internally!

  5. johanvdw commented on Jan 24, 2026

    @johanvdw
    Member

    How does it work: if a users goes to the fosdem website and clicks a schedule link do they get an option to open in the app or the website? Or will it send them to the app immediately?
    Strictly speaking the second is maybe not ideal, especially if people go to the website to double check what the app does.

  6. Wilm0r commented on Jan 24, 2026

    @Wilm0r
    Contributor

    I'm not an expert on this but common.handle_all_urls reads as if any fosdem.org URL could get intercepted.

  7. johnjohndoe commented on Jan 24, 2026

    @johnjohndoe
    ContributorAuthor

    @johanvdw Clicking a valid session link takes you into the app immediately. That is the main idea of app links. Users can opt-out in the app's "open by default" system settings - or obviously by not installing the app.

    Here is a video recording which shows immediate navigation into the app and out to the website from a session link shown in the app.
    EventFahrplan/EventFahrplan#843

  8. johanvdw commented on Jan 25, 2026

    @johanvdw
    Member

    How is determined what is a schedule link and what is not? Is this up to the app? What about other pages on the fosdem website, or schedule pages like fringe? What about subdomains?

  9. johnjohndoe commented on Jan 25, 2026

    @johnjohndoe
    ContributorAuthor

    The domain, subdomains, paths are to be configured in the app, see e.g. https://github.com/EventFahrplan/EventFahrplan/blob/master/app%2Fsrc%2Fccc39c3%2FAndroidManifest.xml#L19

    Only content which is represented in the app should be covered by app links. For FOSDEM this would be restricted to session links.

  10. bastischubert commented on Jan 25, 2026

    @bastischubert
    Member

    As discussed during todays FIT meeting we'll just do it for this year.
    i'm about to implement it after todays meeting

  11. bastischubert commented on Jan 25, 2026

    @bastischubert
    Member

    tagging @cbeyls if he also needs this for https://github.com/cbeyls/fosdem-companion-android
    tagging @Wilm0r if he also needs this for https://github.com/Wilm0r/giggity

  12. Wilm0r commented on Jan 25, 2026

    @Wilm0r
    Contributor

    Bit hard to rush out this functionality safely (and it doesn't seem that useful to me), but thanks for the heads-up @bastischubert :)

    Trying to finish some other improvements before next weekend though.

  13. cbeyls commented on Jan 25, 2026

    @cbeyls
    Contributor

    I never liked that gatekeeping system where some apps are pre-approved for deep links and others are not, for me it's up to the user to decide which app they want to use and approve them manually. For example I use NewPipe to watch YouTube videos which Google will never pre-approve.

    Also I publish on both F-Droid and Google Play, these are considered different apps because F-Droid uses their own certificate. Did you consider the two certificates for your app @johnjohndoe ?

    I may add deep links support at some point but without the pre-approval system.

  14. cbeyls commented on Jan 25, 2026

    @cbeyls
    Contributor

    How does it work: if a users goes to the fosdem website and clicks a schedule link do they get an option to open in the app or the website? Or will it send them to the app immediately? Strictly speaking the second is maybe not ideal, especially if people go to the website to double check what the app does.

    If the app is pre-approved by adding it to that file, it will open the app immediately by default unless the user explicitly disables deep links handling by the app in the OS settings. I agree it's not ideal, I prefer to give the choice by default.

  15. johnjohndoe commented on Jan 25, 2026

    @johnjohndoe
    ContributorAuthor

    @cbeyls I agree, it would be great if the Android system would ask the user at the first time about their preference. I never saw something like this but on the mentioned system option.

    Thanks for the heads up about the F-Droid signing. I haven't thought about it indeed. The build is already reproducible but I haven't found the time to let F-Droid use the same signing key as Google Play. ✔️ I edited the JSON snippet up there now.

  16. cbeyls commented on Jan 25, 2026

    @cbeyls
    Contributor

    @cbeyls I agree, it would be great if the Android system would ask the user at the first time about their preference. I never saw something like this but on the mentioned system option.

    Google changed the rules of the game in Android 12. Before Android 12, when any app was able to handle a web link, the OS would ask the user which app to use to open the web link (including staying in the browser) and a checkbox to memorize the choice.
    Starting with Android 12, web links are always opened by the browser unless the app is pre-approved or manually selected by the user beforehand from the OS settings.

    I have no idea what happens if two different pre-approved apps are installed at the same time though. Which one will win or is there a disambiguation dialog for that specific case?

  17. johnjohndoe commented on Jan 25, 2026

    @johnjohndoe
    ContributorAuthor

    When I have a debug version and a release version of the same app installed, then the release version is opened.

    TIL: I noticed that the Firefox browser and DuckDuckGo browser apps for Android provide options to users about opening app links.

  18. johanvdw commented on Jan 26, 2026

    @johanvdw
    Member

    I don't think this PR works, looking at the build results the file is not included
    https://github.com/FOSDEM/website/actions/runs/21334530871

    and if it does, it would likely require a change in our nginx config (the url should not forward to a specific year)

  19. johanvdw commented on Jan 26, 2026

    @johanvdw
    Member

    I don't think this PR works, looking at the build results the file is not included
    https://github.com/FOSDEM/website/actions/runs/21334530871

    and if it does, it would likely require a change in our nginx config (the url should not forward to a specific year)

  20. bastischubert commented on Jan 27, 2026

    @bastischubert
    Member

    I have no idea what happens if two different pre-approved apps are installed at the same time though. Which one will win or is there a disambiguation dialog for that specific case?

    i'd say, there is only one way to find out ;-)
    honestly: from my understanding this should work only if one of the whitelisted apps is already installed on the device anyway

  21. bastischubert commented on Jan 27, 2026

    @bastischubert
    Member

    I finally deployed the first version of the assetlinks.json - if other apps also need support for this, please either add your details here for 2026 edition or feel free to open a new issue/pr if you like to be included for 2027 (this issue will remain open until this year's edition is wrapped up)

  22. johnjohndoe commented on Jan 28, 2026

    @johnjohndoe
    ContributorAuthor

    @bastischubert Thank you for your quick help. From what I observed, the integration works great. Happy FOSDEM then!

    This ticket can be closed from my point of view.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions