Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
abook_check
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abook_android
abook_check
Commits
fabe1ccc
Commit
fabe1ccc
authored
Apr 15, 2021
by
Kim Jinsung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Task #41804 Androidアプリ課金ライブラリ更新
parent
3d1d8b46
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
0 additions
and
568 deletions
+0
-568
ABVJE_UI_Android/src/com/android/vending/billing/IInAppBillingService.aidl
+0
-144
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabException.java
+0
-44
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabHelper.java
+0
-0
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabResult.java
+0
-45
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Inventory.java
+0
-95
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Purchase.java
+0
-63
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Security.java
+0
-119
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/SkuDetails.java
+0
-58
No files found.
ABVJE_UI_Android/src/com/android/vending/billing/IInAppBillingService.aidl
deleted
100644 → 0
View file @
3d1d8b46
/*
*
Copyright
(
C
)
2012
The
Android
Open
Source
Project
*
*
Licensed
under
the
Apache
License
,
Version
2.0
(
the
"License"
);
*
you
may
not
use
this
file
except
in
compliance
with
the
License
.
*
You
may
obtain
a
copy
of
the
License
at
*
*
http
://
www
.
apache
.
org
/
licenses
/
LICENSE
-
2.0
*
*
Unless
required
by
applicable
law
or
agreed
to
in
writing
,
software
*
distributed
under
the
License
is
distributed
on
an
"AS IS"
BASIS
,
*
WITHOUT
WARRANTIES
OR
CONDITIONS
OF
ANY
KIND
,
either
express
or
implied
.
*
See
the
License
for
the
specific
language
governing
permissions
and
*
limitations
under
the
License
.
*/
package
com
.
android
.
vending
.
billing
;
import
android
.
os
.
Bundle
;
/**
*
InAppBillingService
is
the
service
that
provides
in
-
app
billing
version
3
and
beyond
.
*
This
service
provides
the
following
features
:
*
1.
Provides
a
new
API
to
get
details
of
in
-
app
items
published
for
the
app
including
*
price
,
type
,
title
and
description
.
*
2.
The
purchase
flow
is
synchronous
and
purchase
information
is
available
immediately
*
after
it
completes
.
*
3.
Purchase
information
of
in
-
app
purchases
is
maintained
within
the
Google
Play
system
*
till
the
purchase
is
consumed
.
*
4.
An
API
to
consume
a
purchase
of
an
inapp
item
.
All
purchases
of
one
-
time
*
in
-
app
items
are
consumable
and
thereafter
can
be
purchased
again
.
*
5.
An
API
to
get
current
purchases
of
the
user
immediately
.
This
will
not
contain
any
*
consumed
purchases
.
*
*
All
calls
will
give
a
response
code
with
the
following
possible
values
*
RESULT_OK
=
0
-
success
*
RESULT_USER_CANCELED
=
1
-
user
pressed
back
or
canceled
a
dialog
*
RESULT_BILLING_UNAVAILABLE
=
3
-
this
billing
API
version
is
not
supported
for
the
type
requested
*
RESULT_ITEM_UNAVAILABLE
=
4
-
requested
SKU
is
not
available
for
purchase
*
RESULT_DEVELOPER_ERROR
=
5
-
invalid
arguments
provided
to
the
API
*
RESULT_ERROR
=
6
-
Fatal
error
during
the
API
action
*
RESULT_ITEM_ALREADY_OWNED
=
7
-
Failure
to
purchase
since
item
is
already
owned
*
RESULT_ITEM_NOT_OWNED
=
8
-
Failure
to
consume
since
item
is
not
owned
*/
interface
IInAppBillingService
{
/**
*
Checks
support
for
the
requested
billing
API
version
,
package
and
in
-
app
type
.
*
Minimum
API
version
supported
by
this
interface
is
3.
*
@
param
apiVersion
the
billing
version
which
the
app
is
using
*
@
param
packageName
the
package
name
of
the
calling
app
*
@
param
type
type
of
the
in
-
app
item
being
purchased
"inapp"
for
one
-
time
purchases
*
and
"subs"
for
subscription
.
*
@
return
RESULT_OK
(
0
)
on
success
,
corresponding
result
code
on
failures
*/
int
isBillingSupported
(
int
apiVersion
,
String
packageName
,
String
type
);
/**
*
Provides
details
of
a
list
of
SKUs
*
Given
a
list
of
SKUs
of
a
valid
type
in
the
skusBundle
,
this
returns
a
bundle
*
with
a
list
JSON
strings
containing
the
productId
,
price
,
title
and
description
.
*
This
API
can
be
called
with
a
maximum
of
20
SKUs
.
*
@
param
apiVersion
billing
API
version
that
the
Third
-
party
is
using
*
@
param
packageName
the
package
name
of
the
calling
app
*
@
param
skusBundle
bundle
containing
a
StringArrayList
of
SKUs
with
key
"ITEM_ID_LIST"
*
@
return
Bundle
containing
the
following
key
-
value
pairs
*
"RESPONSE_CODE"
with
int
value
,
RESULT_OK
(
0
)
if
success
,
other
response
codes
on
*
failure
as
listed
above
.
*
"DETAILS_LIST"
with
a
StringArrayList
containing
purchase
information
*
in
JSON
format
similar
to
:
*
'{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00",
* "title : "Example Title", "description" : "This is an example description" }'
*/
Bundle
getSkuDetails
(
int
apiVersion
,
String
packageName
,
String
type
,
in
Bundle
skusBundle
);
/**
*
Returns
a
pending
intent
to
launch
the
purchase
flow
for
an
in
-
app
item
by
providing
a
SKU
,
*
the
type
,
a
unique
purchase
token
and
an
optional
developer
payload
.
*
@
param
apiVersion
billing
API
version
that
the
app
is
using
*
@
param
packageName
package
name
of
the
calling
app
*
@
param
sku
the
SKU
of
the
in
-
app
item
as
published
in
the
developer
console
*
@
param
type
the
type
of
the
in
-
app
item
(
"inapp"
for
one
-
time
purchases
*
and
"subs"
for
subscription
).
*
@
param
developerPayload
optional
argument
to
be
sent
back
with
the
purchase
information
*
@
return
Bundle
containing
the
following
key
-
value
pairs
*
"RESPONSE_CODE"
with
int
value
,
RESULT_OK
(
0
)
if
success
,
other
response
codes
on
*
failure
as
listed
above
.
*
"BUY_INTENT"
-
PendingIntent
to
start
the
purchase
flow
*
*
The
Pending
intent
should
be
launched
with
startIntentSenderForResult
.
When
purchase
flow
*
has
completed
,
the
onActivityResult
()
will
give
a
resultCode
of
OK
or
CANCELED
.
*
If
the
purchase
is
successful
,
the
result
data
will
contain
the
following
key
-
value
pairs
*
"RESPONSE_CODE"
with
int
value
,
RESULT_OK
(
0
)
if
success
,
other
response
codes
on
*
failure
as
listed
above
.
*
"INAPP_PURCHASE_DATA"
-
String
in
JSON
format
similar
to
*
'{"orderId":"12999763169054705758.1371079406387615",
* "packageName":"com.example.app",
* "productId":"exampleSku",
* "purchaseTime":1345678900000,
* "purchaseToken" : "122333444455555",
* "developerPayload":"example developer payload" }'
*
"INAPP_DATA_SIGNATURE"
-
String
containing
the
signature
of
the
purchase
data
that
*
was
signed
with
the
private
key
of
the
developer
*
TODO
:
change
this
to
app
-
specific
keys
.
*/
Bundle
getBuyIntent
(
int
apiVersion
,
String
packageName
,
String
sku
,
String
type
,
String
developerPayload
);
/**
*
Returns
the
current
SKUs
owned
by
the
user
of
the
type
and
package
name
specified
along
with
*
purchase
information
and
a
signature
of
the
data
to
be
validated
.
*
This
will
return
all
SKUs
that
have
been
purchased
in
V3
and
managed
items
purchased
using
*
V1
and
V2
that
have
not
been
consumed
.
*
@
param
apiVersion
billing
API
version
that
the
app
is
using
*
@
param
packageName
package
name
of
the
calling
app
*
@
param
type
the
type
of
the
in
-
app
items
being
requested
*
(
"inapp"
for
one
-
time
purchases
and
"subs"
for
subscription
).
*
@
param
continuationToken
to
be
set
as
null
for
the
first
call
,
if
the
number
of
owned
*
skus
are
too
many
,
a
continuationToken
is
returned
in
the
response
bundle
.
*
This
method
can
be
called
again
with
the
continuation
token
to
get
the
next
set
of
*
owned
skus
.
*
@
return
Bundle
containing
the
following
key
-
value
pairs
*
"RESPONSE_CODE"
with
int
value
,
RESULT_OK
(
0
)
if
success
,
other
response
codes
on
*
failure
as
listed
above
.
*
"INAPP_PURCHASE_ITEM_LIST"
-
StringArrayList
containing
the
list
of
SKUs
*
"INAPP_PURCHASE_DATA_LIST"
-
StringArrayList
containing
the
purchase
information
*
"INAPP_DATA_SIGNATURE_LIST"
-
StringArrayList
containing
the
signatures
*
of
the
purchase
information
*
"INAPP_CONTINUATION_TOKEN"
-
String
containing
a
continuation
token
for
the
*
next
set
of
in
-
app
purchases
.
Only
set
if
the
*
user
has
more
owned
skus
than
the
current
list
.
*/
Bundle
getPurchases
(
int
apiVersion
,
String
packageName
,
String
type
,
String
continuationToken
);
/**
*
Consume
the
last
purchase
of
the
given
SKU
.
This
will
result
in
this
item
being
removed
*
from
all
subsequent
responses
to
getPurchases
()
and
allow
re
-
purchase
of
this
item
.
*
@
param
apiVersion
billing
API
version
that
the
app
is
using
*
@
param
packageName
package
name
of
the
calling
app
*
@
param
purchaseToken
token
in
the
purchase
information
JSON
that
identifies
the
purchase
*
to
be
consumed
*
@
return
0
if
consumption
succeeded
.
Appropriate
error
values
for
failures
.
*/
int
consumePurchase
(
int
apiVersion
,
String
packageName
,
String
purchaseToken
);
}
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabException.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
/**
* Exception thrown when something went wrong with in-app billing.
* An IabException has an associated IabResult (an error).
* To get the IAB result that caused this exception to be thrown,
* call {@link #getResult()}.
*/
public
class
IabException
extends
Exception
{
IabResult
mResult
;
public
IabException
(
IabResult
r
)
{
this
(
r
,
null
);
}
public
IabException
(
int
response
,
String
message
)
{
this
(
new
IabResult
(
response
,
message
));
}
public
IabException
(
IabResult
r
,
Exception
cause
)
{
super
(
r
.
getMessage
(),
cause
);
mResult
=
r
;
}
public
IabException
(
int
response
,
String
message
,
Exception
cause
)
{
this
(
new
IabResult
(
response
,
message
),
cause
);
}
/** Returns the IAB result (error) that this exception signals. */
public
IabResult
getResult
()
{
return
mResult
;
}
}
\ No newline at end of file
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabHelper.java
deleted
100644 → 0
View file @
3d1d8b46
This diff is collapsed.
Click to expand it.
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/IabResult.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
/**
* Represents the result of an in-app billing operation.
* A result is composed of a response code (an integer) and possibly a
* message (String). You can get those by calling
* {@link #getResponse} and {@link #getMessage()}, respectively. You
* can also inquire whether a result is a success or a failure by
* calling {@link #isSuccess()} and {@link #isFailure()}.
*/
public
class
IabResult
{
int
mResponse
;
String
mMessage
;
public
IabResult
(
int
response
,
String
message
)
{
mResponse
=
response
;
if
(
message
==
null
||
message
.
trim
().
length
()
==
0
)
{
mMessage
=
IabHelper
.
getResponseDesc
(
response
);
}
else
{
mMessage
=
message
+
" (response: "
+
IabHelper
.
getResponseDesc
(
response
)
+
")"
;
}
}
public
int
getResponse
()
{
return
mResponse
;
}
public
String
getMessage
()
{
return
mMessage
;
}
public
boolean
isSuccess
()
{
return
mResponse
==
IabHelper
.
BILLING_RESPONSE_RESULT_OK
;
}
public
boolean
isFailure
()
{
return
!
isSuccess
();
}
public
String
toString
()
{
return
"IabResult: "
+
getMessage
();
}
}
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Inventory.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* Represents a block of information about in-app items.
* An Inventory is returned by such methods as {@link IabHelper#queryInventory}.
*/
public
class
Inventory
{
Map
<
String
,
SkuDetails
>
mSkuMap
=
new
HashMap
<>();
Map
<
String
,
Purchase
>
mPurchaseMap
=
new
HashMap
<>();
Inventory
()
{
}
/** Returns the listing details for an in-app product. */
public
SkuDetails
getSkuDetails
(
String
sku
)
{
return
mSkuMap
.
get
(
sku
);
}
/** Returns purchase information for a given product, or null if there is no purchase. */
public
Purchase
getPurchase
(
String
sku
)
{
return
mPurchaseMap
.
get
(
sku
);
}
/** Returns whether or not there exists a purchase of the given product. */
public
boolean
hasPurchase
(
String
sku
)
{
return
mPurchaseMap
.
containsKey
(
sku
);
}
/** Return whether or not details about the given product are available. */
public
boolean
hasDetails
(
String
sku
)
{
return
mSkuMap
.
containsKey
(
sku
);
}
/**
* Erase a purchase (locally) from the inventory, given its product ID. This just
* modifies the Inventory object locally and has no effect on the server! This is
* useful when you have an existing Inventory object which you know to be up to date,
* and you have just consumed an item successfully, which means that erasing its
* purchase data from the Inventory you already have is quicker than querying for
* a new Inventory.
*/
public
void
erasePurchase
(
String
sku
)
{
if
(
mPurchaseMap
.
containsKey
(
sku
))
{
mPurchaseMap
.
remove
(
sku
);
}
}
/** Returns a list of all owned product IDs. */
List
<
String
>
getAllOwnedSkus
()
{
return
new
ArrayList
<>(
mPurchaseMap
.
keySet
());
}
/** Returns a list of all owned product IDs of a given type */
List
<
String
>
getAllOwnedSkus
(
String
itemType
)
{
List
<
String
>
result
=
new
ArrayList
<>();
for
(
Purchase
p
:
mPurchaseMap
.
values
())
{
if
(
p
.
getItemType
().
equals
(
itemType
))
{
result
.
add
(
p
.
getSku
());
}
}
return
result
;
}
/** Returns a list of all purchases. */
List
<
Purchase
>
getAllPurchases
()
{
return
new
ArrayList
<>(
mPurchaseMap
.
values
());
}
void
addSkuDetails
(
SkuDetails
d
)
{
mSkuMap
.
put
(
d
.
getSku
(),
d
);
}
void
addPurchase
(
Purchase
p
)
{
mPurchaseMap
.
put
(
p
.
getSku
(),
p
);
}
}
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Purchase.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Represents an in-app billing purchase.
*/
public
class
Purchase
{
String
mItemType
;
// ITEM_TYPE_INAPP or ITEM_TYPE_SUBS
String
mOrderId
;
String
mPackageName
;
String
mSku
;
long
mPurchaseTime
;
int
mPurchaseState
;
String
mDeveloperPayload
;
String
mToken
;
String
mOriginalJson
;
String
mSignature
;
public
Purchase
(
String
itemType
,
String
jsonPurchaseInfo
,
String
signature
)
throws
JSONException
{
mItemType
=
itemType
;
mOriginalJson
=
jsonPurchaseInfo
;
JSONObject
o
=
new
JSONObject
(
mOriginalJson
);
mOrderId
=
o
.
optString
(
"orderId"
);
mPackageName
=
o
.
optString
(
"packageName"
);
mSku
=
o
.
optString
(
"productId"
);
mPurchaseTime
=
o
.
optLong
(
"purchaseTime"
);
mPurchaseState
=
o
.
optInt
(
"purchaseState"
);
mDeveloperPayload
=
o
.
optString
(
"developerPayload"
);
mToken
=
o
.
optString
(
"token"
,
o
.
optString
(
"purchaseToken"
));
mSignature
=
signature
;
}
public
String
getItemType
()
{
return
mItemType
;
}
public
String
getOrderId
()
{
return
mOrderId
;
}
public
String
getPackageName
()
{
return
mPackageName
;
}
public
String
getSku
()
{
return
mSku
;
}
public
long
getPurchaseTime
()
{
return
mPurchaseTime
;
}
public
int
getPurchaseState
()
{
return
mPurchaseState
;
}
public
String
getDeveloperPayload
()
{
return
mDeveloperPayload
;
}
public
String
getToken
()
{
return
mToken
;
}
public
String
getOriginalJson
()
{
return
mOriginalJson
;
}
public
String
getSignature
()
{
return
mSignature
;
}
@Override
public
String
toString
()
{
return
"PurchaseInfo(type:"
+
mItemType
+
"):"
+
mOriginalJson
;
}
}
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/Security.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
import
java.security.InvalidKeyException
;
import
java.security.KeyFactory
;
import
java.security.NoSuchAlgorithmException
;
import
java.security.PublicKey
;
import
java.security.Signature
;
import
java.security.SignatureException
;
import
java.security.spec.InvalidKeySpecException
;
import
java.security.spec.X509EncodedKeySpec
;
import
android.text.TextUtils
;
import
android.util.Log
;
/**
* Security-related methods. For a secure implementation, all of this code
* should be implemented on a server that communicates with the
* application on the device. For the sake of simplicity and clarity of this
* example, this code is included here and is executed on the device. If you
* must verify the purchases on the phone, you should obfuscate this code to
* make it harder for an attacker to replace the code with stubs that treat all
* purchases as verified.
*/
public
class
Security
{
private
static
final
String
TAG
=
"IABUtil/Security"
;
private
static
final
String
KEY_FACTORY_ALGORITHM
=
"RSA"
;
private
static
final
String
SIGNATURE_ALGORITHM
=
"SHA1withRSA"
;
/**
* Verifies that the data was signed with the given signature, and returns
* the verified purchase. The data is in JSON format and signed
* with a private key. The data also contains the PurchaseState
* and product ID of the purchase.
* @param base64PublicKey the base64-encoded public key to use for verifying.
* @param signedData the signed JSON string (signed, not encrypted)
* @param signature the signature for the data, signed with the private key
*/
public
static
boolean
verifyPurchase
(
String
base64PublicKey
,
String
signedData
,
String
signature
)
{
if
(
TextUtils
.
isEmpty
(
signedData
)
||
TextUtils
.
isEmpty
(
base64PublicKey
)
||
TextUtils
.
isEmpty
(
signature
))
{
Log
.
e
(
TAG
,
"Purchase verification failed: missing data."
);
return
false
;
}
PublicKey
key
=
Security
.
generatePublicKey
(
base64PublicKey
);
return
Security
.
verify
(
key
,
signedData
,
signature
);
}
/**
* Generates a PublicKey instance from a string containing the
* Base64-encoded public key.
*
* @param encodedPublicKey Base64-encoded public key
* @throws IllegalArgumentException if encodedPublicKey is invalid
*/
public
static
PublicKey
generatePublicKey
(
String
encodedPublicKey
)
{
try
{
byte
[]
decodedKey
=
Base64
.
decode
(
encodedPublicKey
);
KeyFactory
keyFactory
=
KeyFactory
.
getInstance
(
KEY_FACTORY_ALGORITHM
);
return
keyFactory
.
generatePublic
(
new
X509EncodedKeySpec
(
decodedKey
));
}
catch
(
NoSuchAlgorithmException
e
)
{
throw
new
RuntimeException
(
e
);
}
catch
(
InvalidKeySpecException
e
)
{
Log
.
e
(
TAG
,
"Invalid key specification."
);
throw
new
IllegalArgumentException
(
e
);
}
catch
(
Base64DecoderException
e
)
{
Log
.
e
(
TAG
,
"Base64 decoding failed."
);
throw
new
IllegalArgumentException
(
e
);
}
}
/**
* Verifies that the signature from the server matches the computed
* signature on the data. Returns true if the data is correctly signed.
*
* @param publicKey public key associated with the developer account
* @param signedData signed data from server
* @param signature server signature
* @return true if the data and signature match
*/
public
static
boolean
verify
(
PublicKey
publicKey
,
String
signedData
,
String
signature
)
{
Signature
sig
;
try
{
sig
=
Signature
.
getInstance
(
SIGNATURE_ALGORITHM
);
sig
.
initVerify
(
publicKey
);
sig
.
update
(
signedData
.
getBytes
());
if
(!
sig
.
verify
(
Base64
.
decode
(
signature
)))
{
Log
.
e
(
TAG
,
"Signature verification failed."
);
return
false
;
}
return
true
;
}
catch
(
NoSuchAlgorithmException
e
)
{
Log
.
e
(
TAG
,
"NoSuchAlgorithmException."
);
}
catch
(
InvalidKeyException
e
)
{
Log
.
e
(
TAG
,
"Invalid key specification."
);
}
catch
(
SignatureException
e
)
{
Log
.
e
(
TAG
,
"Signature exception."
);
}
catch
(
Base64DecoderException
e
)
{
Log
.
e
(
TAG
,
"Base64 decoding failed."
);
}
return
false
;
}
}
ABVJE_UI_Android/src/jp/agentec/abook/abv/cl/billing/SkuDetails.java
deleted
100644 → 0
View file @
3d1d8b46
/* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
jp
.
agentec
.
abook
.
abv
.
cl
.
billing
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
* Represents an in-app product's listing details.
*/
public
class
SkuDetails
{
String
mItemType
;
String
mSku
;
String
mType
;
String
mPrice
;
String
mTitle
;
String
mDescription
;
String
mJson
;
public
SkuDetails
(
String
jsonSkuDetails
)
throws
JSONException
{
this
(
IabHelper
.
ITEM_TYPE_INAPP
,
jsonSkuDetails
);
}
public
SkuDetails
(
String
itemType
,
String
jsonSkuDetails
)
throws
JSONException
{
mItemType
=
itemType
;
mJson
=
jsonSkuDetails
;
JSONObject
o
=
new
JSONObject
(
mJson
);
mSku
=
o
.
optString
(
"productId"
);
mType
=
o
.
optString
(
"type"
);
mPrice
=
o
.
optString
(
"price"
);
mTitle
=
o
.
optString
(
"title"
);
mDescription
=
o
.
optString
(
"description"
);
}
public
String
getSku
()
{
return
mSku
;
}
public
String
getType
()
{
return
mType
;
}
public
String
getPrice
()
{
return
mPrice
;
}
public
String
getTitle
()
{
return
mTitle
;
}
public
String
getDescription
()
{
return
mDescription
;
}
@Override
public
String
toString
()
{
return
"SkuDetails:"
+
mJson
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment