Learning Machine Contributes Android App to Blockcerts

Today, we’re super excited to announce that the power of Blockcerts has finally arrived on the Android platform. If that’s what you’ve been waiting to hear, go download the app now. Otherwise, let’s take a look at what’s in the latest release:


This app release contains feature parity with the iOS app so Android users can also have an easy way to store, view, and share their official records. They can:

  • Generate public/private key pairs, managed by a passphrase
  • Request certificates from issuing institutions by sending public key
  • Recieve and view fully customized, immutable certificates of accomplishment
  • Verify these certificates on-device
  • Share certificates to Twitter, Facebook, and other social media.

Fully Blockcerts-compliant

While this app works best with our open source issuing tools, it fully conforms to the Blockcerts standard. This means:

  • It works with any Blockcerts-compliant issuer
  • It can read v1.2 or later Blockcerts certificates
  • Supports metadata attachments and customized certificate rendering

Open source

Just like the iOS app, we’ve also released the full source of the Android app to the Blockcerts github repository. We believe making this app open source is crucial to add momentum to our ever-growing community of Blockcerts developers who believe in vendor indendence and repient ownership of important records.


Yes, these are key conditions for self-sovereign identity! Blockcerts was the very first mobile app allowing individuals to hold/own their blockchain-based credentials. Here’s a new post to survey the field of related vendors, with an outline of how Blockcerts is leading the way:

Hi there, I’ve just managed to run the Android app with success :slight_smile:

One little fix, in the sample issuer-testnet.json is missing the introductionURL JSON property needed by the Android app[1].

I’ve a question, if the issuer JSON file didn’t include any of revocationList, publicKey, issuerKeys, revocationKeys at the time when the student add a new issuer via the app is a problem?
I think these JSON properties are needed only during the verification process right? (so we can update the issuer JSON file after the student configure the issuer in the Blockcerts app)

Secondo question :slight_smile: When the issuer publish badges via the batch issuing the Blockcerts app display automatically the badges related to the wallet or students need to add it manually?

Thank you very much for you work, it’s matter!

[1] https://github.com/blockchain-certificates/blockchain-certificates.github.io/pull/17


Any insight about these?
Sorry for the follow up but on Saturday 30 Sept. we will have an install fest and it’s crucial to know how to handle the following scenarios.

Hey @aqquadro,

If I remember correctly, it all depends on which version of the issuer identity standard you want to support. I’ll talk just about the current (v2) standard here, but you can look at old test cases for v1.

The V2 issuer format requires the revocationList and publicKey properties to be present. While you’re right in that they’re only used during certificate verification, they need to be present during the introduction. Since we support verification of certificates even if the issuer disappears, capturing this information when adding the issuer is critical.

As you noticed with your PR (Thanks for fixing that, by the way), client apps reject issuers as being invalid if they don’t have all the required data in the standard.

To your second question: When certificates are issued, the students/recipients would need to add those certificates manually.


Great, thank you very much for explaining.

So, regard the second part.
Did you know if there is any intent/url that can be intercepted by the app triggering the “add new certificates”?


I don’t understand. Could you rephrase your question? What are you trying to accomplish?

Sorry, my english is very bad :slight_smile:

In order to improve the student’s experience, I’d like to generate a URL that automatically opens the Blockcerts app and pre-compiles the “add new certificate” form.

Do you know if there is an intent/URL that can achieve this?


No worries! And don’t sell yourself short – your English is fine. It’s just especially hard to talk about technical topics if they’re not your primary language.

Both the iOS and Android apps support universal links for importing certificates. Here’s how you can make one of those URLs:

  1. Take the URL of the certificate. Let’s say it’s http://example.com/certificate.
  2. URL-encode it. Now it’s https:%2F%2Fexample.com%2Fcertificate
  3. Add it to the end of this: https://wallet.blockcerts.org/#/import-certiticate/
  4. That leaves you with https://wallet.blockcerts.org/#/import-certiticate/https:%2F%2Fexample.com%2Fcertificate, which should auto-fill the “Add certificate” form in the iOS and Android app.

Oh yes, yes!!

Grazie :slight_smile:

Hello all,

I know this is an old post to ask a question, but can someone help me to setup the android mobile wallet to view a sample certificate. (i.e.) How to add the sample issuer-testnet.json in the App. Also, after adding the Issuer, how to import a sample certificate and view the same in the app.

I am a newbie to the entire Android development, Blockchain & Blockcerts. So kindly help me figure it out.

Edit: Got it working. Thanks!!

Thanks much,
Gowtham R

Hi @gowtham, the following steps are for adding an issuer.

You need to create your issuer JSON like this
take in mind that the image in the JSON is visibile in the Blockcerts app.

The JSON key introductionUrl value should be a public HTTP endpoint.

When the user, on the Blockcerts app, click on Settings and then Add Issuer he need to insert as Issuer Url https://issuer.growbit.xyz (the location of issuer JSON) and optionally an OTP.
When the user confirm the Blockcerts app execute an HTTP request to the introductionUrl: in this way your backend can verify the OTP and register the shared Bitcoin address that the App has generated for the tuple user/issuer. The address is inside the JSON HTTP request payload.
Thanks to the OTP your backend can link Blockcerts app Bitcoin shared address and the identity of the user.

The next step is to build the certificate JSON and create a link as @downie explain.

Have fun!


I tried to add https://issuer.growbit.xyz as an issuer and 0 as a OTP because the field is required.
I get the following error.

Do you know what am I doing wrong?
Also how can I set up an OTP in the backend?

Do you use: https://github.com/blockchain-certificates/cert-viewer for the introductionUrl ? or did you build your own backend?

Best regards,

do you solve this problem ?
if yes tel me how please ?

Nop never got it solved.

hi @aqquadro, how create json file ? and what i put in one time code label please :slight_smile: ?

You can create your json file start copying ours and replace with your values :smiley:

In the one time code label the user need to put a code that your backend knows: when the user confirm on the wallet app your backend receive a HTTP POST to the introductionUrl as mentioned here.

Hope this help you!

:slight_smile: you can use our issuer only if we send to you a valid OTP :slight_smile:

Our backend that manage OTP is here.