diff --git a/common/framework/push.php b/common/framework/push.php
index e1512570e..3dd1b7236 100644
--- a/common/framework/push.php
+++ b/common/framework/push.php
@@ -290,10 +290,10 @@ class Push
$output = null;
// Android FCM
- if(count($tokens->android))
+ if(count($tokens->fcm))
{
$fcm_driver = $this->getDriver('fcm');
- $output = $fcm_driver->send($this, $tokens->android);
+ $output = $fcm_driver->send($this, $tokens->fcm);
$this->sent = count($output->success) ? true : false;
$this->success_tokens = $output ? $output->success : [];
$this->deleted_tokens = $output ? $output->invalid : [];
@@ -303,10 +303,10 @@ class Push
}
// iOS APNs
- if(count($tokens->ios))
+ if(count($tokens->apns))
{
$apns_driver =$this->getDriver('apns');
- $output = $apns_driver->send($this, $tokens->ios);
+ $output = $apns_driver->send($this, $tokens->apns);
$this->sent = count($output->success) ? true : false;
$this->success_tokens += $output ? $output->success : [];
$this->deleted_tokens += $output ? $output->invalid : [];
@@ -339,26 +339,25 @@ class Push
*/
protected function _getDeviceTokens()
{
- $member_srl_list = $this->getRecipients();
$result = new \stdClass;
- $result->android = [];
- $result->ios = [];
+ $result->fcm = [];
+ $result->apns = [];
$args = new \stdClass;
- $args->member_srl = $member_srl_list;
- $args->device_type = [];
+ $args->member_srl = $this->getRecipients();
+ $args->device_token_type = [];
$driver_types = config('push.types') ?: array();
- if(!count($driver_types))
- {
- return $result;
- }
if(isset($driver_types['fcm']))
{
- $args->device_type[] = 'android';
+ $args->device_token_type[] = 'fcm';
}
if(isset($driver_types['apns']))
{
- $args->device_type[] = 'ios';
+ $args->device_token_type[] = 'apns';
+ }
+ if(!count($args->device_token_type))
+ {
+ return $result;
}
$output = executeQueryArray('member.getMemberDeviceTokensByMemberSrl', $args);
@@ -369,7 +368,7 @@ class Push
foreach($output->data as $row)
{
- $result->{$row->device_type}[] = $row->device_token;
+ $result->{$row->device_token_type}[] = $row->device_token;
}
return $result;
diff --git a/modules/member/member.class.php b/modules/member/member.class.php
index cd2027dd8..b27616fa2 100644
--- a/modules/member/member.class.php
+++ b/modules/member/member.class.php
@@ -200,6 +200,8 @@ class member extends ModuleObject {
if(!$oDB->isIndexExists('member_nickname_log', 'idx_after_nick_name')) return true;
if(!$oDB->isIndexExists('member_nickname_log', 'idx_user_id')) return true;
+ if(!$oDB->isColumnExists('member_devices', 'device_token_type')) return true;
+
$config = ModuleModel::getModuleConfig('member');
// Check members with phone country in old format
@@ -372,6 +374,15 @@ class member extends ModuleObject {
$oDB->addIndex('member_nickname_log', 'idx_user_id', array('user_id'));
}
+ // Add device token type 2020.10.28
+ if(!$oDB->isColumnExists('member_devices', 'device_token_type'))
+ {
+ $oDB->addColumn('member_devices', 'device_token_type', 'varchar', '20', '', true, 'device_token');
+ $oDB->addIndex('member_devices', 'idx_device_token_type', array('device_token_type'));
+ $oDB->query("UPDATE member_devices SET device_token_type = 'fcm' WHERE device_type = 'android' OR LENGTH(device_token) > 64");
+ $oDB->query("UPDATE member_devices SET device_token_type = 'apns' WHERE device_type = 'ios' AND LENGTH(device_token) = 64");
+ }
+
$config = ModuleModel::getModuleConfig('member');
$changed = false;
diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php
index cc4fe425b..0c6453c9d 100644
--- a/modules/member/member.controller.php
+++ b/modules/member/member.controller.php
@@ -68,7 +68,7 @@ class memberController extends member
$args = new stdClass();
$args->member_srl = $member_info->member_srl;
executeQuery('member.deleteAuthMail', $args);
-
+
if(!$config->after_login_url)
{
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'mid', Context::get('mid'), 'act', '');
@@ -99,6 +99,7 @@ class memberController extends member
if(!$password && !$allow_guest_device) return new BaseObject(-1, 'NULL_PASSWORD');
if(!$device_token) return new BaseObject(-1, 'NULL_DEVICE_TOKEN');
+ // Get device information
$browserInfo = Rhymix\Framework\UA::getBrowserInfo();
$device_type = strtolower($browserInfo->os);
$device_version = $browserInfo->os_version;
@@ -107,23 +108,18 @@ class memberController extends member
$device_model = escape($browserInfo->device);
}
- if('ios' === $device_type)
+ // Detect device token type
+ if (preg_match('/^[0-9a-z]{64}$/', $device_token))
{
- if(!preg_match("/^[0-9a-z]{64}$/", $device_token))
- {
- return new BaseObject(-1, 'INVALID_DEVICE_TOKEN');
- }
+ $device_token_type = 'apns';
}
- elseif('android' === $device_type)
+ elseif (preg_match('/^[0-9a-zA-Z:_-]+$/', $device_token) && strlen($device_token) > 64)
{
- if(!preg_match("/^[0-9a-zA-Z:_-]+$/", $device_token))
- {
- return new BaseObject(-1, 'INVALID_DEVICE_TOKEN');
- }
+ $device_token_type = 'fcm';
}
else
{
- return new BaseObject(-1, 'NOT_SUPPORTED_OS');
+ return new BaseObject(-1, 'INVALID_DEVICE_TOKEN');
}
if($user_id && $password)
@@ -151,6 +147,7 @@ class memberController extends member
$args->device_srl = getNextSequence();
$args->member_srl = $member_srl;
$args->device_token = $device_token;
+ $args->device_token_type = $device_token_type;
$args->device_key = $device_key;
$args->device_type = $device_type;
$args->device_version = $device_version;
diff --git a/modules/member/queries/getMemberDeviceTokensByMemberSrl.xml b/modules/member/queries/getMemberDeviceTokensByMemberSrl.xml
index bafd4571b..3e7cb9969 100644
--- a/modules/member/queries/getMemberDeviceTokensByMemberSrl.xml
+++ b/modules/member/queries/getMemberDeviceTokensByMemberSrl.xml
@@ -4,10 +4,10 @@
-
+
-
+
diff --git a/modules/member/queries/insertMemberDevice.xml b/modules/member/queries/insertMemberDevice.xml
index fc67efcf6..518f72284 100644
--- a/modules/member/queries/insertMemberDevice.xml
+++ b/modules/member/queries/insertMemberDevice.xml
@@ -6,6 +6,7 @@
+
diff --git a/modules/member/schemas/member_devices.xml b/modules/member/schemas/member_devices.xml
index cb39ba8de..60d1aa94b 100644
--- a/modules/member/schemas/member_devices.xml
+++ b/modules/member/schemas/member_devices.xml
@@ -2,6 +2,7 @@
+