Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
243 views
in Technique[技术] by (71.8m points)

asn.1 - Flutter, in_app_purchase: way to show subscription expiration date or status

Using the in_app_purchase: ^0.3.5+1 package, I'm trying to verify that a user has an active subscription on iOS.

I can get the productID and transactionDate, with purchaseDetails.productID & purchaseDetails.transactionDate. But I can't seem to get an expiration date or status. Watching the apple videos they talk about "status" heaps. I'm not sure if someone starts a free 3 day trial if the transaction date will know if they cancelled, so not confident to base everything off this transaction date.

I can get the purchaseDetails.verificationData.localVerificationData, which seems to be a ANS1 string, this may have more information but I can't seem to decode it. Does anyone now how to decode this for iOS? Or know another way to get subscription status?

I'm trying not to use a platform like RevenueCat (as they take a cut), they seem to offer features like this though.

Below is the ASN.1 string:

MIIbiQYJKoZIhvcNAQcCoIIbejCCG3YCAQExCzAJBgUrDgMCGgUAMIILKgYJKoZI
hvcNAQcBoIILGwSCCxcxggsTMAoCAQgCAQEEAhYAMAoCARQCAQEEAgwAMAsCAQEC
AQEEAwIBADALAgEDAgEBBAMMATMwCwIBCwIBAQQDAgEAMAsCAQ8CAQEEAwIBADAL
AgEQAgEBBAMCAQAwCwIBGQIBAQQDAgEDMAwCAQoCAQEEBBYCNCswDAIBDgIBAQQE
AgIAyzANAgENAgEBBAUCAwIjqDANAgETAgEBBAUMAzEuMDAOAgEJAgEBBAYCBFAy
NTYwGAIBBAIBAgQQ/UG8mQyNEnmF2PQy51nhPDAbAgEAAgEBBBMMEVByb2R1Y3Rp
b25TYW5kYm94MBsCAQICAQEEEwwRbWlsa2kuZm9jdXMudGltZXIwHAIBBQIBAQQU
j88VIyoRl7su71RrYMoWKY/VmoMwHgIBDAIBAQQWFhQyMDIxLTAxLTA5VDEzOjEz
OjM4WjAeAgESAgEBBBYWFDIwMTMtMDgtMDFUMDc6MDA6MDBaMEICAQcCAQEEOqon
CJy6w5atxqYbNoBJJa3W9WB6qVDijWLZvtDp4yolmsIVkHghqERYsDDj/FUfM9sN
eHQNEYbz8mowTQIBBgIBAQRF4nUjxdFAA0i0vWAK9OR1Y9990SU5jby3UYEwRDLm
rYQ4UJhpEm/mN20wqvhxSqUULT40ZvHz6TXjWvfnvIMIS7/A92nbMIIBgQIBEQIB
AQSCAXcxggFzMAsCAgatAgEBBAIMADALAgIGsAIBAQQCFgAwCwICBrICAQEEAgwA
MAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUCAQEEAgwAMAsCAga2AgEB
BAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMwDAICBq4CAQEEAwIBADAM
AgIGsQIBAQQDAgEAMAwCAga3AgEBBAMCAQAwEgICBq8CAQEECQIHA41+qEntmzAb
AgIGpwIBAQQSDBAxMDAwMDAwNzYyOTU2MjUyMBsCAgapAgEBBBIMEDEwMDAwMDA3
NjI5NTU2MDEwHwICBqYCAQEEFgwUc3Vic2NyaXB0aW9uQW5udWFsMjUwHwICBqgC
AQEEFhYUMjAyMS0wMS0wOVQwODoyMjo0OVowHwICBqoCAQEEFhYUMjAyMS0wMS0w
OVQwODoxODoxMVowHwICBqwCAQEEFhYUMjAyMS0wMS0wOVQwOToyMjo0OVowggGB
AgERAgEBBIIBdzGCAXMwCwICBq0CAQEEAgwAMAsCAgawAgEBBAIWADALAgIGsgIB
AQQCDAAwCwICBrMCAQEEAgwAMAsCAga0AgEBBAIMADALAgIGtQIBAQQCDAAwCwIC
BrYCAQEEAgwAMAwCAgalAgEBBAMCAQEwDAICBqsCAQEEAwIBAzAMAgIGrgIBAQQD
AgEAMAwCAgaxAgEBBAMCAQAwDAICBrcCAQEEAwIBADASAgIGrwIBAQQJAgcDjX6o
Se3OMBsCAganAgEBBBIMEDEwMDAwMDA3NjI5NjI3MzUwGwICBqkCAQEEEgwQMTAw
MDAwMDc2Mjk1NTYwMTAfAgIGpgIBAQQWDBRzdWJzY3JpcHRpb25Bbm51YWwyNTAf
AgIGqAIBAQQWFhQyMDIxLTAxLTA5VDA5OjIyOjQ5WjAfAgIGqgIBAQQWFhQyMDIx
LTAxLTA5VDA4OjE4OjExWjAfAgIGrAIBAQQWFhQyMDIxLTAxLTA5VDEwOjIyOjQ5
WjCCAYECARECAQEEggF3MYIBczALAgIGrQIBAQQCDAAwCwICBrACAQEEAhYAMAsC
AgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEEAgwAMAsCAga1AgEBBAIM
ADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIGqwIBAQQDAgEDMAwCAgau
AgEBBAMCAQAwDAICBrECAQEEAwIBADAMAgIGtwIBAQQDAgEAMBICAgavAgEBBAkC
BwONfqhJ7+owGwICBqcCAQEEEgwQMTAwMDAwMDc2Mjk3MTU2MTAbAgIGqQIBAQQS
DBAxMDAwMDAwNzYyOTU1NjAxMB8CAgamAgEBBBYMFHN1YnNjcmlwdGlvbkFubnVh
bDI1MB8CAgaoAgEBBBYWFDIwMjEtMDEtMDlUMTA6MjI6NDlaMB8CAgaqAgEBBBYW
FDIwMjEtMDEtMDlUMDg6MTg6MTFaMB8CAgasAgEBBBYWFDIwMjEtMDEtMDlUMTE6
MjI6NDlaMIIBgQIBEQIBAQSCAXcxggFzMAsCAgatAgEBBAIMADALAgIGsAIBAQQC
FgAwCwICBrICAQEEAgwAMAsCAgazAgEBBAIMADALAgIGtAIBAQQCDAAwCwICBrUC
AQEEAgwAMAsCAga2AgEBBAIMADAMAgIGpQIBAQQDAgEBMAwCAgarAgEBBAMCAQMw
DAICBq4CAQEEAwIBADAMAgIGsQIBAQQDAgEAMAwCAga3AgEBBAMCAQAwEgICBq8C
AQEECQIHA41+qEnx5DAbAgIGpwIBAQQSDBAxMDAwMDAwNzYyOTc3NzcwMBsCAgap
AgEBBBIMEDEwMDAwMDA3NjI5NTU2MDEwHwICBqYCAQEEFgwUc3Vic2NyaXB0aW9u
QW5udWFsMjUwHwICBqgCAQEEFhYUMjAyMS0wMS0wOVQxMToyMjo1NFowHwICBqoC
AQEEFhYUMjAyMS0wMS0wOVQwODoxODoxMVowHwICBqwCAQEEFhYUMjAyMS0wMS0w
OVQxMjoyMjo1NFowggGBAgERAgEBBIIBdzGCAXMwCwICBq0CAQEEAgwAMAsCAgaw
AgEBBAIWADALAgIGsgIBAQQCDAAwCwICBrMCAQEEAgwAMAsCAga0AgEBBAIMADAL
AgIGtQIBAQQCDAAwCwICBrYCAQEEAgwAMAwCAgalAgEBBAMCAQEwDAICBqsCAQEE
AwIBAzAMAgIGrgIBAQQDAgEAMAwCAgaxAgEBBAMCAQAwDAICBrcCAQEEAwIBADAS
AgIGrwIBAQQJAgcDjX6oSfQwMBsCAganAgEBBBIMEDEwMDAwMDA3NjI5ODk2ODMw
GwICBqkCAQEEEgwQMTAwMDAwMDc2Mjk1NTYwMTAfAgIGpgIBAQQWDBRzdWJzY3Jp
cHRpb25Bbm51YWwyNTAfAgIGqAIBAQQWFhQyMDIxLTAxLTA5VDEyOjIyOjU0WjAf
AgIGqgIBAQQWFhQyMDIxLTAxLTA5VDA4OjE4OjExWjAfAgIGrAIBAQQWFhQyMDIx
LTAxLTA5VDEzOjIyOjU0WjCCAYECARECAQEEggF3MYIBczALAgIGrQIBAQQCDAAw
CwICBrACAQEEAhYAMAsCAgayAgEBBAIMADALAgIGswIBAQQCDAAwCwICBrQCAQEE
AgwAMAsCAga1AgEBBAIMADALAgIGtgIBAQQCDAAwDAICBqUCAQEEAwIBATAMAgIG
qwIBAQQDAgEDMAwCAgauAgEBBAMCAQAwDAICBrECAQEEAwIBATAMAgIGtwIBAQQD
AgEAMBICAgavAgEBBAkCBwONfqhJ7ZowGwICBqcCAQEEEgwQMTAwMDAwMDc2Mjk1
NTYwMTAbAgIGqQIBAQQSDBAxMDAwMDAwNzYyOTU1NjAxMB8CAgamAgEBBBYMFHN1
YnNjcmlwdGlvbkFubnVhbDI1MB8CAgaoAgEBBBYWFDIwMjEtMDEtMDlUMDg6MTg6
MDlaMB8CAgaqAgEBBBYWFDIwMjEtMDEtMDlUMDg6MTg6MTFaMB8CAgasAgEBBBYW
FDIwMjEtMDEtMDlUMDg6MjA6MDlaoIIOZTCCBXwwggRkoAMCAQICCA7rV4fnngmN
MA0GCSqGSIb3DQEBBQUAMIGWMQswCQYDVQQGEwJVUzETMBEGA1UECgwKQXBwbGUg
SW5jLjEsMCoGA1UECwwjQXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlv
bnMxRDBCBgNVBAMMO0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVsYXRpb25z
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTE1MTExMzAyMTUwOVoXDTIzMDIw
NzIxNDg0N1owgYkxNzA1BgNVBAMMLk1hYyBBcHAgU3RvcmUgYW5kIGlUdW5lcyBT
dG9yZSBSZWNlaXB0IFNpZ25pbmcxLDAqBgNVBAsMI0FwcGxlIFdvcmxkd2lkZSBE
ZXZlbG9wZXIgUmVsYXRpb25zMRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQG
EwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXPgf0looFb1oft
I9ozHI7iI8ClxCbLPcaf7EoNVYb/pALXl8o5VG19f7JUGJ3ELFJxjmR7gs6JuknW
COW0iHHPP1tGLsbEHbgDqViiBD4heNXbt9COEo2DTFsqaDeTwvK9HsTSoQxKWFKr
EuPt3R+YFZA1LcLMEsqNSIH3WHhUa+iMMTYfSgYMR1TzN5C4spKJfV+khUrhwJzg
uqS7gpdj9CuTwf0+b8rB9Typj1IawCUKdg7e/pn+/8Jr9VterHNRSQhWicxDkMyO
gQLQoJe2XLGhaWmHkBBoJiY5uB0Qc7AKXcVz0N92O9gt2Yge4+wHz+KO0NP6JlWB
7+IDSSMCAwEAAaOCAdcwggHTMD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYj
aHR0cDovL29jc3AuYXBwbGUuY29tL29jc3AwMy13d2RyMDQwHQYDVR0OBBYEFJGk
nPzEdrefoIr0TfWPNl3tKwSFMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUiCcX
Cam2GGCL7Ou69kdZxVJUo7cwggEeBgNVHSAEggEVMIIBETCCAQ0GCiqGSIb3Y2QF
BgEwgf4wgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZp
Y2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
LCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ug
c3RhdGVtZW50cy4wNgYIKwYBBQUHAgEWKmh0dHA6Ly93d3cuYXBwbGUuY29tL2Nl
cnRpZmljYXRlYXV0aG9yaXR5LzAOBgNVHQ8BAf8EBAMCB4AwEAYKKoZIhvdjZAYL
AQQCBQAwDQYJKoZIhvcNAQEFBQADggEBAA2mG9MuPeNbKwduQpZs0+iMQzCCX+Bc
0Y2+vQ+9GvwlktuMhcOAWd/j4tcuBRSsDdu2uP78NS58y60Xa45/H+R3ubFnlbQT
XqYZhnb4WiCV52OMD3P86O3GH66Z+GVIXKDgKDrAEDctuaAEOR9zucgF/fLefxoq
Km4rAfygIFzZ630npjP49ZjgvkTbsUxn/G4KT8niBqjSl/OnjmtRolqEdWXRFgRi
48Ff9Qipz2jZkgDJwYyz+I0AZLpYYMB8r491ymm5WyrWHWhumEL1TKc3GZvMOxx6
GUPzo22/SGAGDDaSK+zeGLUR2i0j0I78oGmcFxuegHs5R0UwYS/HE6gwggQiMIID
CqADAgECAggB3rzEOW2gEDANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET
MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMTMwMjA3MjE0
ODQ3WhcNMjMwMjA3MjE0ODQ3WjCBljELMAkGA1UEBhMCVVMxEzARBgNVBAoMCkFw
cGxlIEluYy4xLDAqBgNVBAsMI0FwcGxlIFdvcmxkd2lkZSBEZXZlbG9wZXIgUmVs
YXRpb25zMUQwQgYDVQQDDDtBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0
aW9ucyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAMo4VKbLVqrIJDlI6Yzu7F+4fyaRvDRTes58Y4Bhd2RepQcj
tjn+UC0VVlhwLX7EbsFKhT4v8N6EGqFXya97GP9q+hUSSRUIGayq2yoy7ZZjaFIV
PYyK7L9rGJXgA6wBfZcFZ84OhZU3au0Jtq5nzVFkn8Zc0bxXbmc1gHY2pIeBbjiP
2CsVTnsl2Fq/ToPBjdKT1RpxtWCcnTNOVfkSWAyGuBYNweV3RY1QSLorLeSUheHo
xJ3GaKWwo/xnfnC6AllLd0KRObn1zeFM78A7SIym5SFd/Wpqu6cWNWDS5q3zRinJ
6MOL6XnAamFnFbLw/eVovGJfbs+Z3e8bY/6SZasCAwEAAaOBpjCBozAdBgNVHQ4E
FgQUiCcXCam2GGCL7Ou69kdZxVJUo7cwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
GDAWgBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAuBgNVHR8EJzAlMCOgIaAfhh1odHRw
Oi8vY3JsLmFwcGxlLmNvbS9yb290LmNybDAOBgNVHQ8BAf8EBAMCAYYwEAYKKoZI
hvdjZAYCAQQCBQAwDQYJKoZIhvcNAQEFBQADggEBAE/P71m+LPWybC+P7hOHMugF
Nahui33JaQy52Re8dyzUZ+L9mm06WVzfgwG9sq4qYXKxr83DRTCPo4MNzh1HtPGT
iqN0m6TDmHKHOz6vRQuSVLkyu5AYU2sKThC22R1QbCGAColOV4xrWzw9pv3e9w0j
HQtKJoc/upGSTKQZEhltV/V6WId7aIrkhoxK6+JJFKql3VUAqa67SzCu4aCxvCmA
5gl35b40ogHKf9ziCuY7uLvsumKV8wVjQYLNDzsdTJWk26v5yZXpT+RN5yaZgem8
+bQp0gF6ZuEujPYhisX4eOGBrr/TkJ2prfOv/TgalmcwHFGlXOxxioK0bA8MFR8w
ggS7MIIDo6ADAgECAgECMA0GCSqGSIb3DQEBBQUAMGIxCzAJBgNVBAYTAlVTMRMw
EQYDVQQKEwpBcHBsZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9u
IEF1dGhvcml0eTEWMBQGA1UEAxMNQXBwbGUgUm9vdCBDQTAeFw0wNjA0MjUyMTQw
MzZaFw0zNTAyMDkyMTQwMzZaMGIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBcHBs
ZSBJbmMuMSYwJAYDVQQLEx1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEW
MBQGA1UEAxMNQXBwbGUgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAOSRqQkfkdseR1DrBe1eeYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74
UAnTf0GomPnRymacJGsR0KO75Bsqwx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVd
DtV/X5vyJQO6VY9NXQ3xZDUjFUsVWR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2
PwEwjLdDzw+dPfMrSSgayP7OtbkO2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYhar
o3GSR1NVwa8vQbP4++NwzeajTEV+H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxo
s48d3mVz/2deZbxJ2HafMxRloXeUyS0CAwEAAaOCAXowggF2MA4GA1UdDwEB/wQE
AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdH
TX8IXjAfBgNVHSMEGDAWgBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjCCAREGA1UdIASC
AQgwggEEMIIBAAYJKoZIhvdjZAUBMIHyMCoGCCsGAQUFBwIBFh5odHRwczovL3d3
dy5hcHBsZS5jb20vYXBwbGVjYS8wgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFuY2Ug
b24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRh
bmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNv
bmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmlj
YXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wDQYJKoZIhvcNAQEFBQADggEBAFw2
mUwteLftjJvc83eb8nbSdzBPwR+Fg4UbmT1HN/Kpm0COLNSxkBLYvvRzm+7SZA/L
eU802KI++Xj/a8gH7H05g4tTINM4xLG/mk8Ka/8r/FmnBQl8F0BWER5007eLIztH
o9VvJOLr0bdw3w9F4SfK8W147ee1Fxeo3H4iNcol1dkP1mvUoiQjEfehrI9zgWDG
G1sJL5Ky+ERI8GA4nhX1PSZnIIozavcNgs/e66Mv+VNqW2TAYzN39zoHLFbr2g8h
Dtq6cxlPtdk2f8GHVdmnmbkyQvvY1XGefqFStxu9k0IkEirHDx22TZxeY8hLgBdQ
qorV2uT80AkHN7B1dSExggHLMIIBxwIBATCBozCBljELMAkGA1UEBhMCVVMxEzAR
BgNVBAoMCkFwcGxlIEluYy4xLDAqBgNVBAsMI0FwcGxlIFdvcmxkd2lkZSBEZXZl
bG9wZXIgUmVsYXRpb25zMUQwQgYDVQQDDDtBcHBsZSBXb3JsZHdpZGUgRGV2ZWxv
cGVyIFJlbGF0aW9ucyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eQIIDutXh+eeCY0w
CQYFKw4DAhoFADANBgkqhkiG9w0BAQEFAASCAQA00os/nEDLvWqxtyQvpSTIJUH4
fo3p7B9pNkKt7faN1xaj7YJtos1EpGYpw6J4qeCrERAPoNHsUrAFIkxN2KBG86qB
JNIULlY5qGVmsPcAvVceb4jEwHTghiU4+1aGM2oUTOBoVxpJbA6XOT9ZY6ePz0cj
6WPQ+abJBMuk28D7V9mbfytPJxJxRjG1n5k5qDTJeH6+M72X+T8IOwB6i2tGBG8s
GWYkS+eMPgXCtaPPcQBVP9jH7Ri+AA7HloZWuUkAtdExz6bn3fPUMd00/z8MYbqI
LNfAd4UidVsNGIudimK/MTjwTWDY2qW/KE7/T9qQhOfLxg5nJnOvFAGKod3U
question from:https://stackoverflow.com/questions/65648375/flutter-in-app-purchase-way-to-show-subscription-expiration-date-or-status

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The string is indeed ASN.1 data. You can decode the string online, for example using https://lapo.it/asn1js/. The decoded data contains some dates fields, so maybe the information you need is there. You will need an ASN.1 schema in order to really understand which field means what.

In order to decode the ASN.1 data in your app, you need to use some ASN.1 decoding library You could also try to write a TLV decoder (tag-length-value) for ASN.1 BER (basic encoding rules), which will help you to get individual fields from the data. This should not be overly complicated to achieve. After you decode the ASN.1 BER data into TLVs, you could further decode only some specific fields that are useful to you.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...