diff --git a/README.md b/README.md
index f284cb96..176815f8 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
- Android 8.x ~ 13.x
- API levels 26 ~ 33
- Android Studio 2020.3.1 Patch 2 ~ 2021.3.1
-(※2023年3月時点)
+(※2023年4月時点)
## テクニカルサポート窓口対応バージョン
@@ -31,7 +31,7 @@
※なお、mobile backend にて大規模な改修が行われた際は、1年半以内のSDKであっても対応出来ない場合がございます。
その際は[informationブログ](https://mbaas.nifcloud.com/info/)にてお知らせいたします。予めご了承ください。
-- v1.0.0 ~ (※2023年3月時点)
+- v1.0.0 ~ (※2023年4月時点)
# インストール
Android Studioでプロジェクトを開き、以下の手順でSDKをインストールしてください。
diff --git a/build.gradle b/build.gradle
index 8c4de9c9..f11c902e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -33,7 +33,7 @@ buildscript {
android {
compileSdkVersion 31
- buildToolsVersion "29.0.2"
+ buildToolsVersion "30.0.2"
defaultConfig {
minSdkVersion 20
targetSdkVersion 31
diff --git a/src/main/java/com/nifcloud/mbaas/core/NCMB.kt b/src/main/java/com/nifcloud/mbaas/core/NCMB.kt
index 347cac64..5097d93b 100644
--- a/src/main/java/com/nifcloud/mbaas/core/NCMB.kt
+++ b/src/main/java/com/nifcloud/mbaas/core/NCMB.kt
@@ -43,7 +43,7 @@ class NCMB {
/**
* Version of this SDK
*/
- const val SDK_VERSION = "1.4.0"
+ const val SDK_VERSION = "1.5.0"
/**
* Prefix of keys in metadata for NCMB settings
diff --git a/src/main/java/com/nifcloud/mbaas/core/NCMBPushService.kt b/src/main/java/com/nifcloud/mbaas/core/NCMBPushService.kt
index 54768220..3dd17241 100644
--- a/src/main/java/com/nifcloud/mbaas/core/NCMBPushService.kt
+++ b/src/main/java/com/nifcloud/mbaas/core/NCMBPushService.kt
@@ -22,7 +22,22 @@ import java.util.*
/**
* Service class for push notification api
*/
-internal class NCMBPushService : NCMBService() {
+internal class NCMBPushService : NCMBObjectService() {
+
+
+ /** service path for API category */
+ override val SERVICE_PATH = "push"
+
+
+ /**
+ * Constructor
+ *
+ * @param context NCMBContext object for current context
+ */
+ init {
+ this.mServicePath = this.SERVICE_PATH
+ }
+
/**
* Create push object
*
@@ -32,7 +47,8 @@ internal class NCMBPushService : NCMBService() {
*/
@Throws(NCMBException::class)
fun sendPush(params: JSONObject): JSONObject {
- val request = createRequestParams(null, params, null, NCMBRequest.HTTP_METHOD_POST)
+ // val request = createRequestParams(null, params, null, NCMBRequest.HTTP_METHOD_POST)
+ val request = createRequestParamsPush(null, params, null, NCMBRequest.HTTP_METHOD_POST, null, null)
val response = sendRequest(request)
when (response) {
is NCMBResponse.Success -> {
@@ -55,7 +71,7 @@ internal class NCMBPushService : NCMBService() {
*/
@Throws(NCMBException::class)
fun updatePush(pushId: String?, params: JSONObject): JSONObject {
- val request = createRequestParams(pushId, params, null, NCMBRequest.HTTP_METHOD_PUT)
+ val request = createRequestParamsPush(pushId, params, null, NCMBRequest.HTTP_METHOD_PUT, null, null)
val response = sendRequest(request)
when (response) {
is NCMBResponse.Success -> {
@@ -87,11 +103,13 @@ internal class NCMBPushService : NCMBService() {
}
//connect
- val paramsRequest = createRequestParams(
+ val paramsRequest = createRequestParamsPush(
"$pushId/openNumber",
params,
null,
- NCMBRequest.HTTP_METHOD_POST
+ NCMBRequest.HTTP_METHOD_POST,
+ null,
+ null
)
val pushReceiptStatusHandler = NCMBHandler { callback, response ->
when (response) {
@@ -114,26 +132,28 @@ internal class NCMBPushService : NCMBService() {
}
/**
- * Setup params to installation
+ * Setup params to push
*
- * @param installationId installation id
- * @param params installation parameters
+ * @param pushId push id
+ * @param params push parameters
* @param queryParams query parameters
* @param method method
* @return parameters in object
*/
@Throws(NCMBException::class)
- fun createRequestParams(
- installationId: String?,
+ fun createRequestParamsPush(
+ pushId: String?,
params: JSONObject,
queryParams: JSONObject?,
- method: String
+ method: String,
+ callback: NCMBCallback?,
+ handler: NCMBHandler?
): RequestParams {
//url set
- val url: String = if (installationId != null) {
+ val url: String = if (pushId != null) {
//PUT,GET(fetch)
- NCMB.getApiBaseUrl() + mServicePath + "/" + installationId
+ NCMB.getApiBaseUrl() + mServicePath + "/" + pushId
} else {
//POST,GET(search)
NCMB.getApiBaseUrl() + this.mServicePath
@@ -142,21 +162,45 @@ internal class NCMBPushService : NCMBService() {
url = url,
method = method,
params = params,
- contentType = NCMBRequest.HEADER_CONTENT_TYPE_JSON
+ contentType = NCMBRequest.HEADER_CONTENT_TYPE_JSON,
+ callback = callback,
+ handler = handler
)
}
- companion object {
- /** service path for API category */
- const val SERVICE_PATH = "push"
- }
-
/**
- * Constructor
+ * Setup params to do find request for Query search functions
*
- * @param context NCMBContext object for current context
+ * @param className Class name
+ * @param query JSONObject
+ * @return parameters in object
+ * @throws NCMBException
*/
- init {
- mServicePath = SERVICE_PATH
+ @Throws(NCMBException::class)
+ override fun findObjectParams(className: String, query:JSONObject): RequestParams {
+ var url = NCMB.getApiBaseUrl() + this.mServicePath
+ if(query.length() > 0) {
+ url = url.plus("?" + queryUrlStringGenerate(query))
+ }
+ val method = NCMBRequest.HTTP_METHOD_GET
+ val contentType = NCMBRequest.HEADER_CONTENT_TYPE_JSON
+ return RequestParams(url = url, method = method, contentType = contentType, query=query)
+ }
+
+ @Throws(NCMBException::class)
+ override fun createSearchResponseList(className: String, responseData: JSONObject): List {
+ return try {
+ val results = responseData.getJSONArray(NCMBQueryConstants.RESPONSE_PARAMETER_RESULTS)
+ val array: MutableList = ArrayList()
+ for (i in 0 until results.length()) {
+ val tmpObj = NCMBPush(results.getJSONObject(i))
+ array.add(tmpObj)
+ }
+ array
+ } catch (e: JSONException) {
+ throw NCMBException(NCMBException.INVALID_JSON, "Invalid JSON format.")
+ }
}
}
+
+
diff --git a/src/main/java/com/nifcloud/mbaas/core/NCMBQuery.kt b/src/main/java/com/nifcloud/mbaas/core/NCMBQuery.kt
index de9c7d17..d772f935 100644
--- a/src/main/java/com/nifcloud/mbaas/core/NCMBQuery.kt
+++ b/src/main/java/com/nifcloud/mbaas/core/NCMBQuery.kt
@@ -81,6 +81,10 @@ class NCMBQuery private constructor(val mClassName: String, val
fun forFile(): NCMBQuery {
return NCMBQuery("file", NCMBFileService()) as NCMBQuery
}
+
+ fun forPush(): NCMBQuery {
+ return NCMBQuery("push", NCMBPushService()) as NCMBQuery
+ }
}
/**
diff --git a/src/main/java/com/nifcloud/mbaas/core/NCMBUserService.kt b/src/main/java/com/nifcloud/mbaas/core/NCMBUserService.kt
index 2156183c..9ac612cd 100644
--- a/src/main/java/com/nifcloud/mbaas/core/NCMBUserService.kt
+++ b/src/main/java/com/nifcloud/mbaas/core/NCMBUserService.kt
@@ -108,8 +108,8 @@ internal class NCMBUserService : NCMBObjectService() {
* @throws NCMBException
*/
@Throws(NCMBException::class)
- protected fun loginUser(query: JSONObject): NCMBUser {
- val reqParams = loginByNameParams(query, null, null)
+ protected fun loginUser(param: JSONObject): NCMBUser {
+ val reqParams = loginByNameParams(param, null, null)
val response = sendRequest(reqParams)
val responseData = loginByNameCheckResponse(response)
return postLoginProcess(responseData)
@@ -213,7 +213,7 @@ internal class NCMBUserService : NCMBObjectService() {
* @throws NCMBException
*/
@Throws(NCMBException::class)
- protected fun loginUserInBackground(query: JSONObject, loginCallback: NCMBCallback){
+ protected fun loginUserInBackground(param: JSONObject, loginCallback: NCMBCallback){
val loginHandler = NCMBHandler { logincallback, response ->
when (response) {
is NCMBResponse.Success -> {
@@ -227,7 +227,7 @@ internal class NCMBUserService : NCMBObjectService() {
}
}
}
- val reqParams : RequestParams = loginByNameParams(query, loginCallback, loginHandler)
+ val reqParams : RequestParams = loginByNameParams(param, loginCallback, loginHandler)
sendRequestAsync(reqParams, loginCallback, loginHandler)
}
@@ -289,11 +289,13 @@ internal class NCMBUserService : NCMBObjectService() {
* @throws NCMBException
*/
@Throws(NCMBException::class)
- fun loginByNameParams(query: JSONObject, loginCallback: NCMBCallback?, loginHandler: NCMBHandler?): RequestParams {
- val url = NCMB.getApiBaseUrl() + "login?" + queryUrlStringGenerate(query)
- val method = NCMBRequest.HTTP_METHOD_GET
+
+ fun loginByNameParams(params: JSONObject, loginCallback: NCMBCallback?, loginHandler: NCMBHandler?): RequestParams {
+ val url = NCMB.getApiBaseUrl() + "login"
+
+ val method = NCMBRequest.HTTP_METHOD_POST
val contentType = NCMBRequest.HEADER_CONTENT_TYPE_JSON
- return RequestParams(url = url, method = method, contentType = contentType, query = query, callback = loginCallback, handler = loginHandler)
+ return RequestParams(url = url, method = method, contentType = contentType, params = params, callback = loginCallback, handler = loginHandler)
}
/**
diff --git a/src/test/assets/json/valid_get_push_response.json b/src/test/assets/json/valid_get_push_response.json
index d7c9538a..cba47d02 100644
--- a/src/test/assets/json/valid_get_push_response.json
+++ b/src/test/assets/json/valid_get_push_response.json
@@ -1 +1 @@
-{"objectId":"7FrmPTBKSNtVjajm","deliveryTime":{"iso":"2015-07-09T15:10:00.000Z","__type":"Date"},"deliveryExpirationDate":null,"richUrl":"http:\/\/www.yahoo.co.jp\/","searchCondition":{},"badgeIncrementFlag":true,"sound":"default","userSettingValue":{"score":100},"acl":{"*":{"read":true,"write":true}},"message":"message","deliveryExpirationTime":"10 day","title":"title","error":null,"target":["android","ios"],"dialog":true,"action":"com.sample.NCMBReceiver","category":"Category","contentAvailable":false,"badgeSetting":null,"deliveryNumber":0,"deliveryPlanNumber":3,"status":0,"createDate":"2015-07-09T06:08:45.668Z","updateDate":"2015-07-09T06:08:45.669Z"}
\ No newline at end of file
+{"results":[{"objectId":"7FrmPTBKSNtVjajm","deliveryTime":{"iso":"2015-07-09T15:10:00.000Z","__type":"Date"},"deliveryExpirationDate":null,"richUrl":"http:\/\/www.yahoo.co.jp\/","searchCondition":{},"badgeIncrementFlag":true,"sound":"default","userSettingValue":{"score":100},"acl":{"*":{"read":true,"write":true}},"message":"message","deliveryExpirationTime":"10 day","title":"title1","error":null,"target":["android","ios"],"dialog":true,"action":"com.sample.NCMBReceiver","category":"Category","contentAvailable":false,"badgeSetting":null,"deliveryNumber":0,"deliveryPlanNumber":3,"status":0,"createDate":"2015-07-09T06:08:45.668Z","updateDate":"2015-07-09T06:08:45.669Z"},{"objectId":"raCwV9E8HjPWO5yW","deliveryTime":{"iso":"2015-07-10T15:10:00.000Z","__type":"Date"},"target":["ios"],"searchCondition":null,"message":null,"userSettingValue":null,"deliveryExpirationDate":null,"deliveryExpirationTime":null,"deliveryPlanNumber":1,"deliveryNumber":0,"status":4,"action":null,"badgeIncrementFlag":true,"sound":null,"contentAvailable":false,"title":"title2","createDate":"2015-07-08T14:00:02.805Z","updateDate":"2015-07-08T14:00:02.921Z","acl":{"*":{"read":true,"write":true}}}]}
\ No newline at end of file
diff --git a/src/test/assets/json/valid_get_searchPush_response.json b/src/test/assets/json/valid_get_searchPush_response.json
index 69ef98d7..914628e1 100644
--- a/src/test/assets/json/valid_get_searchPush_response.json
+++ b/src/test/assets/json/valid_get_searchPush_response.json
@@ -1,71 +1 @@
-{
- "results": [
- {
- "objectId": "dummyObjectId01",
- "deliveryTime": {
- "iso": "2014-12-18T08:59:05.351Z",
- "__type": "Date"
- },
- "deliveryExpirationDate": null,
- "richUrl": null,
- "searchCondition": null,
- "badgeIncrementFlag": true,
- "sound": null,
- "userSettingValue": null,
- "message": "message1",
- "deliveryExpirationTime": null,
- "title": "title1",
- "error": null,
- "target": [
- "android"
- ],
- "dialog": true,
- "action": "Ncmb.com.push.unity.RECEIVE_PUSH",
- "category": null,
- "contentAvailable": false,
- "badgeSetting": null,
- "deliveryNumber": 1,
- "deliveryPlanNumber": 1,
- "status": 2,
- "createDate": "2014-12-18T08:59:05.354Z",
- "updateDate": "2014-12-18T08:59:15.987Z",
- "acl": {
- "*": {
- "read": true,
- "write": true
- }
- }
- },
- {
- "objectId":"dummyObjectId02",
- "deliveryTime":{"iso":"2014-12-18T08:59:05.351Z","__type":"Date"},
- "deliveryExpirationDate":null,
- "richUrl":null,
- "searchCondition":null,
- "badgeIncrementFlag":true,
- "sound":null,
- "userSettingValue":null,
- "message":"message2",
- "deliveryExpirationTime":null,
- "title":"title2",
- "error":null,
- "target":["android"],
- "dialog":true,
- "action":"Ncmb.com.push.unity.RECEIVE_PUSH",
- "category":null,
- "contentAvailable":false,
- "badgeSetting":null,
- "deliveryNumber":2,
- "deliveryPlanNumber":2,
- "status":2,
- "createDate":"2014-12-19T08:59:05.354Z",
- "updateDate":"2014-12-19T08:59:15.987Z",
- "acl":{
- "*":{
- "read":true,
- "write":true
- }
- }
- }
- ]
-}
+{"results":[{"objectId":"ukAwn7IKAG4Lgt0H","deliveryTime":{"iso":"2014-12-18T08:59:05.351Z","__type":"Date"},"deliveryExpirationDate":null,"richUrl":null,"searchCondition":null,"badgeIncrementFlag":true,"sound":null,"userSettingValue":null,"message":"message1","deliveryExpirationTime":null,"title":"title1","error":null,"target":["android"],"dialog":true,"action":"Ncmb.com.push.unity.RECEIVE_PUSH","category":null,"contentAvailable":false,"badgeSetting":null,"deliveryNumber":1,"deliveryPlanNumber":1,"status":2,"createDate":"2014-12-18T08:59:05.354Z","updateDate":"2014-12-18T08:59:15.987Z","acl":{"*":{"read":true,"write":true}}},{"objectId":"zsps3o9UkhYxO9p9","deliveryTime":{"iso":"2014-12-18T08:59:05.351Z","__type":"Date"},"deliveryExpirationDate":null,"richUrl":null,"searchCondition":null,"badgeIncrementFlag":true,"sound":null,"userSettingValue":null,"message":"message2","deliveryExpirationTime":null,"title":"title2","error":null,"target":["android"],"dialog":true,"action":"Ncmb.com.push.unity.RECEIVE_PUSH","category":null,"contentAvailable":false,"badgeSetting":null,"deliveryNumber":2,"deliveryPlanNumber":2,"status":2,"createDate":"2014-12-19T08:59:05.354Z","updateDate":"2014-12-19T08:59:15.987Z","acl":{"*":{"read":true,"write":true}}}]}
\ No newline at end of file
diff --git a/src/test/assets/yaml/mbaas_error.yml b/src/test/assets/yaml/mbaas_error.yml
index 9c8d5966..5b4d69c9 100644
--- a/src/test/assets/yaml/mbaas_error.yml
+++ b/src/test/assets/yaml/mbaas_error.yml
@@ -17,30 +17,30 @@ response:
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "Ncmb Ichiro"
password: invalidPassword
- method: GET
response:
status: 401
file: invalid_get_login_response.json
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "invalidUser"
password: Password
- method: GET
response:
status: 401
file: invalid_get_login_response.json
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "Ncmb Jirou"
password: dummyPassword
- method: GET
response:
status: 200
file: valid_get_login_response.json
diff --git a/src/test/assets/yaml/mbaas_query.yml b/src/test/assets/yaml/mbaas_query.yml
index 1c7f6f6b..1e150a74 100644
--- a/src/test/assets/yaml/mbaas_query.yml
+++ b/src/test/assets/yaml/mbaas_query.yml
@@ -1,18 +1,15 @@
request:
url: /2013-09-01/push
method: GET
- query:
- where: '{"target":["android"]}'
- limit: 2
response:
status: 200
- file: valid_get_searchPush_response.json
+ file: valid_get_push_response.json
---
request:
url: /2013-09-01/push
method: GET
query:
- where: '{"target":["android"]}'
+ where: '{"target":"android"}'
response:
status: 200
file: valid_get_searchPush_response.json
diff --git a/src/test/assets/yaml/mbaas_users.yml b/src/test/assets/yaml/mbaas_users.yml
index a6210d57..ef5d1355 100644
--- a/src/test/assets/yaml/mbaas_users.yml
+++ b/src/test/assets/yaml/mbaas_users.yml
@@ -292,8 +292,8 @@ response:
---
request:
url: /2013-09-01/login
- method: GET
- query:
+ method: POST
+ body:
userName: "Ncmb Tarou"
password: "dummyPassword"
response:
@@ -302,39 +302,39 @@ response:
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
mailAddress: "sample@example.com"
password: dummyPassword
- method: GET
response:
status: 200
file: valid_get_login_response.json
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
mailAddress: "sample@example.com"
password: "incorrectPassword"
- method: GET
response:
status: 401
file: valid_error_incorrect_password_response.json
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
mailAddress: "sample@example.com"
- method: GET
response:
status: 400
file: valid_error_empty_password_response.json
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
mailAddress: "sample@example.com"
password: ""
- method: GET
response:
status: 400
file: valid_error_empty_password_response.json
@@ -445,10 +445,10 @@ response:
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "NcmbCurrentUser"
password: dummyPassword
- method: GET
response:
status: 200
file: valid_get_getCurrentUser_response.json
@@ -462,10 +462,10 @@ response:
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "NcmbToTestAfterLogin"
password: dummyPassword
- method: GET
response:
status: 200
file: valid_get_getUser_login_response.json
@@ -513,10 +513,10 @@ response:
---
request:
url: /2013-09-01/login
- query:
+ method: POST
+ body:
userName: "saveAfterLogin"
password: saveAfterLogin
- method: GET
response:
status: 200
file: valid_get_login_to_save_user_response.json
diff --git a/src/test/java/com/nifcloud/mbaas/core/NCMBQueryTest.kt b/src/test/java/com/nifcloud/mbaas/core/NCMBQueryTest.kt
index 7814bbb2..c82883b0 100644
--- a/src/test/java/com/nifcloud/mbaas/core/NCMBQueryTest.kt
+++ b/src/test/java/com/nifcloud/mbaas/core/NCMBQueryTest.kt
@@ -31,6 +31,7 @@ import org.robolectric.annotation.Config
import org.skyscreamer.jsonassert.JSONAssert
import java.lang.Exception
import java.util.*
+import kotlin.collections.ArrayList
import kotlin.test.assertFails
//Android環境のベースにテスト実装するため
@@ -936,4 +937,44 @@ class NCMBQueryTest {
)
}
+ @Test
+ fun test_NCMBPush_find_success(){
+ val query = NCMBQuery.forPush()
+ val pushes = query.find()
+ Assert.assertEquals(
+ 2,
+ pushes.size
+ )
+ Assert.assertEquals(
+ pushes[0].title,
+ "title1"
+ )
+ Assert.assertEquals(
+ pushes[0].getObjectId(),
+ "7FrmPTBKSNtVjajm"
+ )
+ Assert.assertEquals(
+ pushes[1].title,
+ "title2"
+ )
+ Assert.assertEquals(
+ pushes[1].getObjectId(),
+ "raCwV9E8HjPWO5yW"
+ )
+ }
+
+ @Test
+ fun test_NCMBPush_find_whereEqualTo_success(){
+ val query = NCMBQuery.forPush()
+ query.whereEqualTo("target","android")
+ val android_pushes = query.find()
+ Assert.assertEquals(
+ android_pushes[0].getObjectId(),
+ "ukAwn7IKAG4Lgt0H"
+ )
+ Assert.assertEquals(
+ android_pushes[1].getObjectId(),
+ "zsps3o9UkhYxO9p9"
+ )
+ }
}