
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо GCM рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг-рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ:
- рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
- рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП 4096kb рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИред
- рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдкреИрдХреЗрдЯ рднреЗрдЬрддрд╛ рд╣реИред
- рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдирддрд╛ рд╣реИ:
- рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
- рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░
Google рдХреНрд▓рд╛рдЙрдб рдореИрд╕реЗрдЬрд┐рдВрдЧ - рд▓рдШреБ рдФрд░ рд╕реНрдкрд╖реНрдЯ
рдЬреАрд╕реАрдПрдо рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдВрджреЗрд╢ рд╕реЗрд╡рд╛ рд╣реИред рдорд╛рдирдХ рдорддрджрд╛рди рдФрд░ рд▓рдВрдмреЗ рдорддрджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк, рд▓реЗрдХрд┐рди рдЕрдирдиреНрдп рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреВрд░рдХред Google рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рддрд░рдг рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдФрд░ рдЧрддрд┐ CDMDM рдХреЗ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╕ рд╕реНрдерд╛рди рдмрди рдЧрдИ рд╣реИ)ред рдпрджрд┐ рдлреЛрди рдкрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдмрдВрдж рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ 4 рд╕рдкреНрддрд╛рд╣ рддрдХ GCM рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЛрди рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЫреБрдЯреНрдЯреА рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдЧрдорди рдкрд░, рдЙрд╕реЗ рдЕрдм рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, GCM рдХреЛ рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡рд┐рддрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рдердорд┐рдХ рдорддрджрд╛рди - рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ N рдорд┐рдирдЯ рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЛрдИ рднреА Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди GCM рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрдж рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдХреБрдЫ рд╣реА рд╕реЗрдХрдВрдб рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЖрд╡реЗрджрди GCM рд╕рд░реНрд╡рд░ рд╕реЗ RegistrationId рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдирддреАрдЬрддрди, рд╕рд░реНрд╡рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдЬреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХрд╛ RegistrationId рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЛ рдЬреАрд╕реАрдПрдо рд╕рд░реНрд╡рд░ рдореЗрдВ рдЬреЙрдиреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рдХреБрдВрдЬреА => рдорд╛рди рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди json рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ)ред рд╕рд░реНрд╡рд░ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдореЗрдВ json рднреА рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реБрдИ рд╣реИрдВред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЪрд▓реЛ рджреЛ рдХрдХреНрд╖рд╛рдПрдВ GcmPayload рдФрд░ GcmSender рдмрдирд╛рдПрдВред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧclass GcmPayload { public function __construct($regId, $jsons) {} public $regId; public $jsons; } class GcmSender { public function __construct($payloads) {} public function send() {} protected function getPackages() {} protected function isReadyToFlush($items, $json) {} public function onResponse($response, $info, RollingCurlRequest $request) {} }
GCM рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ, рдкреЗрд▓реЛрдб рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдбреЗрдЯрд╛ рдХреБрдВрдЬреА рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕рдХреА рд╕реАрдорд╛ 4096 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА ред
GcmPayload - рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдПрдХ RegistrationIdред $ Jsons рдлрд╝реАрд▓реНрдб рдХреЛ рдЗрд╕ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ json'ov рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ $recipients = $messagesRepository->getRecipientsWithNewMessages(); $payloads = array(); foreach ($recipients as $recipient) { $jsons = array(); foreach ($recipient->messages as $message) { $jsons[] = json_encode($message); } $payloads[] = new GcmPayload($recipient['regId'], $jsons); } $gcm = new GcmSender(); $gcm->send($payloads);
GcmSender
рд▓рдЧрд╛рддрд╛рд░ рдФрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдп
const GCM_API_KEY = 'рдЖрдкрдХреА рдПрдкреА рдХреБрдВрдЬреА'; // Google API рдХреЙрдиреНрд╕реЛрд▓ рдкреГрд╖реНрда рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
const CURL_TIMEOUT = 10; // Google рд╕рд░реНрд╡рд░ рд╕реЗрдХрдВрдб рдореЗрдВ
const GCM_MAX_DATA_SIZE = 4096; // рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
const GCM_SERVER_URL = 'https://android.googleapis.com/gcm/send'; // GCM рд╕рд░реНрд╡рд░ рдХрд╛ рдкрддрд╛
const GCM_MAX_CONNECTIONS = 10; // рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
const KEY_REG_IDS = 'registration_ids'; // json рдЕрдиреБрд░реЛрдз рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреБрдВрдЬреА
const KEY_DATA = 'рдбреЗрдЯрд╛'; // json рдЕрдиреБрд░реЛрдз рдореЗрдВ рдбреЗрдЯрд╛ рдХреБрдВрдЬреА
const KEY_ITEMS = 'рдЖрдЗрдЯрдо'; // рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдорд╛рд░реА рдбреЗрдЯрд╛ рд╕рд░рдгреА рд╡рд╛рд▓реА рдХреБрдВрдЬреА
const REGID_PLACEHOLDER = '_REGID_'; // рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП json рдЕрдиреБрд░реЛрдз рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ
const ITEMS_PLACEHOLDER = '_ITEMS_'; // json рдЕрдиреБрд░реЛрдз рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреА рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░
const GCM_ERROR_NOTRcture = 'NotRegistered'; // рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛
рд╕рдВрд░рдХреНрд╖рд┐рдд $ _template; // json рдЕрдиреБрд░реЛрдз рдЯреЗрдореНрдкрд▓реЗрдЯ
рд╕рдВрд░рдХреНрд╖рд┐рдд $ _baseDataSize; // рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░, рдЬрд┐рд╕рдореЗрдВ рдЖрдЗрдЯрдо рдХреБрдВрдЬреА, рдХреЛрд╖реНрдардХ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдбрд┐рдЬрд╛рдЗрдирд░
рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рдЕрдиреБрд░реЛрдз рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреЗрдЯрдкреЗрдХреЗрдЬ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐ рдбреЗрдЯрд╛ 4096 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛: {"рдЖрдЗрдЯрдо": []}
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ public function __construct() { $dataObj = '{"'.self::KEY_ITEMS.'": ['.self::ITEMS_PLACEHOLDER.']}'; $this->_template = '{ "'.self::KEY_REG_IDS.'": ["'.self::REGID_PLACEHOLDER.'"], "'.self::KEY_DATA.'": '.$dataObj.' }'; $baseDataJson = str_replace(self::ITEMS_PLACEHOLDER, '', $dataObj); $this->_baseDataSize = strlen($baseDataJson); }
рд╡рд┐рдзрд┐ рднреЗрдЬреЗрдВ
рдЬреАрд╕реАрдПрдо рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рдзрд┐ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЧреЗрдЯрдкреЗрдХреЗрдЬ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкреЛрд╕реНрдЯ рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдВрд╕ рдкреНрд░рд╛рд░реВрдк (рдПрдХ рдкреИрдХреЗрдЯ - рдПрдХ рдЕрдиреБрд░реЛрдз) рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 4096 рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИред рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдЕрджреНрднреБрдд
рд░реЛрд▓рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛
рдЖрд░рдВрднреАрдХрд░рдг рд╣реИ, рдЬреЛ
рдХрд░реНрд▓_рдореБрд▓реНрддрд┐_рд╕реЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ
рдЕрдВрдЬрд╛рдо рджреЗрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдХреЙрд▓рдмреИрдХ рд╡рд┐рдзрд┐ рдСрдирд░рд╕реНрдкреЛрдВрд╕ рдХреЗ рд╕рд╛рде RollingCurl рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рднреЗрдЬрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рднреЗрдЬ рд░рд╣рд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ public function send($payloads) { $packages = self::getPackages($payloads); if (!$packages || count($packages) == 0) return; $rc = new RollingCurl(array($this, 'onResponse')); $headers = array('Authorization: key='.self::GCM_API_KEY, 'Content-Type: application/json'); $rc->__set('headers', $headers); $rc->options = array( CURLOPT_SSL_VERIFYPEER => false,
GetPackages рд╡рд┐рдзрд┐
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдХреНрд▓рд╛рд╕ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреЗрд▓реЛрдб рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдзреАрд░реЗ-рдзреАрд░реЗ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдкреИрдХреЗрдЯ 4096 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рди рд╣реЛ рдЬрд╛рдП рдпрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред рд╡реИрд╕реЗ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреИрдХреЗрдЯ рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдореНрдореЗрд▓рди рд╕рдЪ рд╣реИ рдЬрдм рдПрдХ рдкрд╛рда рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдореВрд╣ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдкреЛрдВ рдореЗрдВ, рдПрдХ рд╣реА рд╕рдВрджреЗрд╢ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ GCM рдЗрд╕реЗ Registration_ids рдХреБрдВрдЬреА рдХреЗ рдорд╛рди рдореЗрдВ рдХрдИ RegistrationId рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рдкрд╕ getPackages рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, isReadyToFlush рдлрд╝рдВрдХреНрд╢рди рдпрд╣рд╛рдВ рд░реБрдЪрд┐ рдХрд╛ рд╣реИ, рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЬрд╕рди рдЬреЛрдбрд╝рдирд╛ 4096 рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдкреИрдХреЗрдЬ рддреБрд░рдВрдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рдирдП рдкреИрдХреЗрдЬ рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ protected function getPackages($payloads) { $packages = array(); foreach($payloads as $payload) { $template = str_replace(self::REGID_PLACEHOLDER, $payload->regId, $this->_template); $items = ''; foreach($payload->jsons as $json) { if ($this->isReadyToFlush($items, $json)) { $package = str_replace(self::ITEMS_PLACEHOLDER, $items, $template); $packages[] = $package; $items = ''; } if ($items) $items .= ','.$json; else $items = $json; } if ($items) {
OnResponse рд╡рд┐рдзрд┐
рдпрд╣ рди рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗред onResponse рд╡рд╣ рдХреЙрд▓рдмреИрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рд░реЛрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдореЗрдВ RollingCurl рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ред рдХреЛрд▓реНрдмреЗрдХ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- $ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ - рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
- $ рдЬрд╛рдирдХрд╛рд░реА curl_getinfo рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ php.net/manual/en/function.curl-getinfo.php рдФрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ http рдХреЛрдб рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдкрд▓реЛрдб / рдбрд╛рдЙрдирд▓реЛрдб рдЧрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдХреЗрд╡рд▓ http рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
- RollingCurlRequest $ рдЕрдиреБрд░реЛрдз - рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВред рд╣рдо $ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ-> post_data
рдлрд╝рдВрдХреНрд╢рди рд╕реВрдЪреА рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдВрдЧреА:
рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ public function onResponse($response, $info, RollingCurlRequest $request) {
рдЕрдкрдбреЗрдЯ резjcrow рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдЕрджреНрдпрддрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ
рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ
рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ => рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред рдФрд░ рдПрдХ рдкреБрд░рд╛рдирд╛ RegistrationId рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб, рдФрд░ рджреВрд╕рд░рд╛ рдирдП рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рд╣рдо рджреЛрдиреЛрдВ RegistrationId рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдкреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ RegistrationId рдЖрдПрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкрдВрдЬреАрдХрд░рдгрдЖрдИрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк: рдпрджрд┐ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ RegistrationId рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣рд░ рдмрд╛рд░ рджреЛ рд╕рдорд╛рди рд╕рдВрджреЗрд╢ рдорд┐рд▓рддреЗ рд╣реИрдВред
рд╕рдорд╛рдзрд╛рди: рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдСрдирд░рд╕реНрдкреЗрд╕ рдореЗрдВ рдПрдХ рдирдпрд╛ RegistrationId рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ, рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╛ рддреЛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣рдЯрд╛ рджреЗрдВ рдпрд╛ рдЕрдиреНрдп рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рджреЛрдиреЛрдВ рд░рдЦреЗрдВред
рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ GCM рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдлрд▓ рднреЗрдЬрдиреЗ рдХрд╛ рдорддрд▓рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╛рдкреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЫреБрдЯреНрдЯреА рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдСрди-рдкреНрд░рд┐рдиреНрд╕реЗрд╕ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдлрд┐рд░ рдХрд╣рд╛рдБ? рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдорддрджрд╛рди рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯреЗрдЯрд╕ рдбрд╛рд▓реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рджреЛ рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░, рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рд╣рдореЗрд╢рд╛ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд┐рдкрдХреНрд╖ - рдпрд╛рддрд╛рдпрд╛рдд рдФрд░ рдмреИрдЯрд░реА рдХреА рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ред
рдпрджрд┐ рдЖрдкрдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рдореИрдВ
рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдЕрдВрддрднрд╛рд╖рдг
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рди рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдмрди рдЬрд╛рдПрдЧрд╛, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмреИрдХрдПрдВрдб рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред