Example App
You can find an executable example app in the source with several calls to the SDK, which can guide you through your development.
Initial Setup
Clone Repository: Clone the polygonid-android-sdk repository.
Run the app:
./gradlew installDebug app
General Flow
Overview
In the upcoming sections, we shall see the general flow of how to use the Polygon ID SDK plugin. The steps are summarised as:
A. Identity
- Initialize Polygon ID SDK.
- Create an Identity for the wallet.
- Retrieve Identifier from the Identity created in the previous step.
- Remove Identity (only if required).
- Get iden3Message from Issuer.
- Authenticate Identity using Identifier, iden3Message, and Private Key.
B. Credential
- Create CredentialRequestEntity from the Iden3Message received from an Issuer.
- Fetch and Save credentials (received from Issuer) on SDK using CredentialRequestEntity, Identifier, and Private Key.
- Get credentials that are saved on wallet SDK. One can also retrieve them with credential IDs.
- Remove credential (only if required).
- Update credential (only if required).
C. Proof
- Generate zero-knowledge proof using iden3Message, Identifier, and Private Key.
Initiate Polygon ID SDK
To start using Polygon ID SDK, an integrator needs to initialize it first. This is done by using:
PolygonIdSdk.init(
context = context,
env = EnvEntity(
blockchain = "polygon",
network = "amoy",
web3Url = "https://polygon-amoy.infura.io/v3/",
web3RdpUrl = "wss://polygon-amoy.infura.io/v3/",
web3ApiKey = "theApiKey",
idStateContract = "0x1a4cC30f2aA0377b0c3bc9848766D90cb4404124",
pushUrl = "https://push-staging.polygonid.com/api/v1"
),
)
env
is optional and can be set afterward with PolygonIdSdk.getInstance().setEnv()
After the SDK initialization, the Integrator will need to use the instance of PolygonIdSDK PolygonIdSdk.getInstance()
.
Get current environment
The current environment can be retrieved using getEnv()
, it gives an EnvEntity
:
PolygonIdSdk.getInstance().getEnv(context = context)
Get Iden3Message from a String
An Integrator uses iden3Message
to communicate with an Issuer/Verifier. This 'iden3message' is created from the QR code scanned by the user on his/her wallet. The getIden3Message()
uses a string message (created after scanning the QR code) as the input parameter and generates iden3Message
.
PolygonIdSdk.getInstance().getIden3Message(
context, theMessage
)
A. Identity
This part of the flow consists of initialising Polygon ID SDK, creating an identifier for an identity and retrieving it, and using the identifier to authenticate the Identity.
1. Create Identity
After SDK initialization, the SDK checks the existence of an Identifier that was previously created with the addIdentity()
function.
If no previously created Identifier is found, the SDK first needs to create an identity first using addIdentity()
function.
PolygonIdSdk.getInstance().addIdentity(
context = context, secret = "theSecret"
)
You can retrieve your private key
from the PrivateIdentityEntity
specified in the code above. Keep this private key safe; it will be used in a few other SDK methods as you will see in the following steps.
It is not mandatory to pass the secret
as the input parameter in the function. If you do not pass it, a random secret
is generated by the system.
2. Get did Identifier
This retrieves the did identifier
by passing the environment detail and private key
input parameter to the getDidIdentifier()
function; please note that the private key
is generated from PrivateIdentityEntity
that we generated via addIdentity()
function in the previous section.
PolygonIdSdk.getInstance().getDidIdentifier(
context = context,
privateKey = privateKey,
blockchain = env.blockchain,
network = env.network,
)
3. Remove Identity
To remove an existing Identity (use this only when required), you need to call the removeIdentity()
with did identifier
and the privateKey
as the input parameters.
PolygonIdSdk.getInstance().removeIdentity(
context = context,
privateKey = privateKey,
genesisDid = didIdentifier
)
4. Authenticate Identity
The authentication includes two steps:
- Get an iden3message from the QR code as seen on 2.
- Authenticate Identity using iden3message
We use authenticate()
to authenticate an identity by using privateKey
, did identifier
, and iden3Message
as the input parameters.
PolygonIdSdk.getInstance().authenticate(
context = context,
message = message as Iden3MessageEntity.AuthIden3MessageEntity,
genesisDid = did,
privateKey = privateKey
)
B. Credential
This part of the flow consists of retrieving credentials from an Issuer and saving them in the wallet. One or more credentials can be retrieved and one or more credentials can be removed from the wallet.
1. Fetch and Save Credentials
This functionality consists of retrieving credentials from an Issuer (by fetching them) and then saving them on the wallet.
This involves:
- Get an iden3message from the QR code as seen on 2.
- Fetching and saving credentials using
CredentialRequestEntity
,identifier
, andprivateKey
.
PolygonIdSdk.getInstance().fetchAndSaveClaims(
context = context,
message = message as Iden3MessageEntity.OfferIden3MessageEntity,
genesisDid = did,
privateKey = privateKey
)
2. Get Credentials
Once credentials have been saved on the wallet SDK, these can be retrieved by the Integrator using getClaims()
with did identifier
, and privateKey
used as the mandatory input parameters and filters
as an optional one. Filters
lets an Integrator get credentials based on some pre-determined criteria.
PolygonIdSdk.getInstance().getClaims(
context = context,
genesisDid = did,
privateKey = privateKey,
filters = filters
)
3. Get Credentials by Ids
This functionality lets an Integrator get credentials from an Issuer based on their IDs. The list of IDs claimIds
, did identifier
, and privateKey
are passed as input parameters to the getClaimsByIds()
function and a list of credentials in the form of ClaimEntity
is retrieved.
PolygonIdSdk.getInstance().getClaimsByIds(
context = context,
genesisDid = did,
privateKey = privateKey,
claimIds = listOf(id)
)
4. Remove a Credential
A credential can be removed from the wallet using removeClaim()
by passing claimId
(the ID of the credential to be removed), the did identifier
and the privateKey
as the input parameters.
PolygonIdSdk.getInstance().removeClaim(
context = context,
genesisDid = did,
privateKey = privateKey,
claimId = id
)
5. Remove Multiple Credentials
This is similar to removing a single credential described above. In this case, you need to pass a list of claimIds
to be removed, the did identifier
, and the privateKey
as the input parameters to removeClaims()
.
PolygonIdSdk.getInstance().removeClaims(
context = context,
genesisDid = did,
privateKey = privateKey,
claimIds = ids
)
6. Update Credential
To update a credential, the updateClaim()
function is used with the following fields passed as input parameters:
claimId
identifier
privateKey
- other information such as identity
state
,issuer
, credential'sexpiration
date,type
of credential, etc.
PolygonIdSdk.getInstance().updateClaim(
context = context,
claimId = claimId
genesisDid = did,
privateKey = privateKey,
state: theState,
expiration: theExpiration,
type: theType,
data: theData,
)