рд╣рдо iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ (рдмрдЪреНрдЪреЗ рдХреЗ рдореЙрдирд┐рдЯрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд┐рдирд╛ рдФрд░ WebRTC рдХреЗ рдмрд┐рдирд╛)

рдЫрд╡рд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрд╡реЗрджрди рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ - рдмрдЪреНрдЪреЗ рдХреА рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрдЬрдм рдЖрдк рдмрдЪреНрдЪреЗ рдХреЗ рдмрд┐рд╕реНрддрд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдХрд░рдг (рдЯреИрдмрд▓реЗрдЯ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░рд╛ (рдлреЛрди), рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рд╛рде рд▓реЗ рдЬрд╛рдПрдВ, рд░рд╕реЛрдИ рд╕реЗ рдХрд╣реЗрдВ, рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪреНрдЪреЗ рдХреЛ рджреЗрдЦреЗрдВред ред



рдПрдХ рдирд╡рдирд┐рд░реНрдорд┐рдд рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдирд╕реЛрдВ рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИ - рдЖрдкрдХреЛ рд╕рдбрд╝рдХ рд╕реЗ рд╣рд░ рд╕рд░рд╕рд░рд╛рд╣рдЯ рдпрд╛ рдЪреАрдЦ рд╕реБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЖрдк рдПрдХ рдирдЬрд╝рд░ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдмрдЪреНрдЪреЗ рдХреЗ рд╕рд╛рде рд╣реИред рддрдХрдиреАрдХреА рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдорд╛рд░реЗ iOS рд╡реАрдбрд┐рдпреЛ рдЪреИрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рднрд╛рдЧ (NAT рдЯреНрд░реЗрд╡рд░рд▓ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдФрд░ TURN рд╕рд░реНрд╡рд░) рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╣ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реИред рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рд╡рд╛рдИ-рдлрд╛рдИ рдФрд░ 2 рдЬреА / 3 рдЬреА / 4 рдЬреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛрдиреЛрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рдРрдкрд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХ рдЪрд╛рдЗрд▓реНрдб рд╡реАрдбрд┐рдпреЛ рдореЙрдиреАрдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рдерд╛ рдЬреЛ рдореЛрдмрд╛рдЗрд▓ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдПрдирдПрдЯреА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЗ рдХрд╛рд░рдг), рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рдкреЛрд╕реНрдЯ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдиреЗрддрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдПрдХ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдирд┐рдЧрд░рд╛рдиреА рдпрд╛ рджреЛ-рддрд░рдлрд╝рд╛ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡реЗрдмрдЖрд░рдЯреАрд╕реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡реЗрдм-рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдг (рд╕рд╛рде рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреА рдЕрдкрдиреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред



рдЯреА:

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдУрдПрд╕ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЫреЛрдЯреЗ рдмрдЪреНрдЪреЛрдВ (рд╢рд┐рд╢реБрдУрдВ) рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдкрдбрд╝реЛрд╕реА рдбрд┐рд╡рд╛рдЗрд╕ рдвреВрдВрдврдирд╛ рдерд╛, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдмрдЪреНрдЪреЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдкреНрд░рдХрд╛рд╢ (рдлреНрд▓реИрд╢) рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рд▓реЛрд░реА рдмрдЬрд╛рдПрдВ, рд╡рд╣рд╛рдВ рдорд╛рдЗрдХреНрд░реЛрдлреЛрди рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, 2 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореБрдЦреНрдп рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ:



рдЖрдЗрдП рдЗрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдФрд░ рд╕рд┐рдВрдХ рдХрд░реЗрдВ



рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд╛рдИ-рдлрд╛рдИ рдпрд╛ рдмреНрд▓реВрдЯреВрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред Googling, рдиреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ 4 рддрд░реАрдХреЗ рдвреВрдВрдвреЗред рдпрд╣рд╛рдБ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг, рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:



  1. рдмреЛрдВрдЬреЛрд░ рд╕реЗрд╡рд╛ - рд╡рд╛рдИ-рдлрд╛рдИ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирдореВрдиреЗ рдХреЛ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдИрдУрдПрд╕ 6-7 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  2. рдХреЛрд░ рдмреНрд▓реВрдЯреВрде - рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдХреИрд╕реЗ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдИрдУрдПрд╕ 5 рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреЗ рдмреНрд▓реВрдЯреВрде рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ - рдХреЗрд╡рд▓ рдмреНрд▓реВрдЯреВрде 4 рдПрд▓рдИ рд╕рдорд░реНрдерд┐рдд рд╣реИред
  3. GameKit ред рдардВрдбрд╛ рд╕рд╛рдорд╛рдиред рдЕрд╕рд▓ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдПрдХ рджрд░рд╡рд╛рдЬреЗ рдХреА рддрд░рд╣ рд╣реИред рдпрд╣ рдирд┐рдпрдорд┐рдд рдмреНрд▓реВрдЯреВрде (iPhone 4 рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдЙрд╕рд╕реЗ рднреА рдХрдо рдХреЗ рд▓рд┐рдП) рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреЛрдиреНрдЬреМрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдФрд░ рд╡рд╛рдИрдлрд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦрд╛рдореА рд╣реИ - рдЖрдИрдУрдПрд╕ 7 рдХреЗ рдмрд╛рдж рд╕реЗ рдкрджрд╛рд╡рдирддред
  4. рдорд▓реНрдЯреАрдкреНрдкрд░ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдЖрдИрдУрдПрд╕ 7 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдПрдХ рдирдпрд╛ рдврд╛рдВрдЪрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЧреЗрдордХрд┐рдЯ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдХреЗрд╡рд▓ рдЖрдИрдУрдПрд╕ 7 рдХреЗ рд▓рд┐рдПред рд╣рдордиреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред


рд╣рдо рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд╣рдд рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдФрд░ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрди рдЪрд╛рд░ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕рдХрд╛ рд╣рдордиреЗ рдЕрдВрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрдирд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рдХрд▓рд╛ред



рдЗрд╕ рддрд░рд╣ рдХреА рд╕реЗрд╡рд╛ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдЙрдкрд╕рд░реНрдЧ "рдмреАрдмреА" рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдирд╛рдо рд╕реЗ рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдХреБрдЫ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ):



#import "BBDeviceModel.h" typedef enum CommonServieType { CommonServiceTypeBonjour = 0, CommonServiceTypeBluetoothLE, CommonServiceTypeGameKitWiFi, CommonServiceTypeGameKitBluetooth, CommonServiceTypeMultipeer, }CommonServieType; @protocol BBCommonServiceDelegate; @interface BBCommonService : NSObject @property (nonatomic, weak) id<BBCommonServiceDelegate> delegate; -(void) setConnectionType:(CommonServieType)type; -(void) startServerSide; -(void) stopServerSide; -(void) startSearchDevices; -(void) stopSearchDevices; -(void) selectDevice:(BBDeviceModel *)deviceModel; -(void) clean; @end @protocol BBCommonServiceDelegate <NSObject> @optional -(void) service:(BBCommonService *)servie didFindDevice:(BBDeviceModel *)device; -(void) service:(BBCommonService *)servie didRemoveDevice:(BBDeviceModel *)device; -(void) service:(BBCommonService *)servie serverDidFinishedSync:(BOOL)isFinished; -(void) service:(BBCommonService *)servie clientDidFinishedSync:(BOOL)isFinished; @end @interface BBDeviceModel : NSObject @property (nonatomic, strong) id device; -(NSString *)deviceName; -(void)setDeviceName:(NSString *)name; -(BOOL) isDeviceEqualTo:(id)otherDevice; @end
      
      





рдЕрдЧрд▓рд╛, рд╣рдо рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ BBCommonService рд╕реЗ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд░реЛрдХрддреЗ рд╣реИрдВ, рд╕рд╛рдл рддрд░реАрдХреЗ, рдФрд░ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рднреА рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред



рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓рд┐рдВрдЧ



рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ QuickBlox рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдЗрд╕рдореЗрдВ рдЖрдк рдЕрдкрдирд╛ рдПрдкреНрд▓реАрдХреЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рд╕реНрд╡рдпрдВ рд╣реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдХрдиреЗрдХреНрд╢рди рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ - http://quickblox.com/developers/IOS-how-to-connect-Quickblox-framework ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддрдм:



1) Quickblox.framework рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ 15 рдЯреБрдХрдбрд╝реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ - рдЙрдирдХреА рд╕реВрдЪреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣реИ

2) рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкрд░ рд▓реМрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдИрдбреА, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреБрдВрдЬреА рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЧреБрдкреНрдд:



 [QBSettings setApplicationID:APP_ID]; [QBSettings setAuthorizationKey:AUTH_KEY]; [QBSettings setAuthorizationSecret:AUTH_SECRET];
      
      





рд╕рдм рдХреБрдЫ, рдЕрдм рдЖрдк рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



1. рд╕рддреНрд░


QuickBlox рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 [QBAuth createSessionWithDelegate:self];
      
      





рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕рддреНрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрди рд╡рд┐рдзрд┐ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрддреА рд╣реИ:



 - (void)completedWithResult:(Result *)result { QBAAuthResult *authResult = (QBAAuthResult *)result; if ([authResult isKindOfClass:[QBAAuthResult class]]) { // do something } }
      
      







2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рд▓реЙрдЧрд┐рди рдмрдирд╛рдирд╛ред


рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╣реАрдВ рдирд╣реАрдВред рдпрд╣ рднреА рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



 // registration QBUUser *user = [QBUUser new]; user.password = aPass; user.login = aLogin; [QBUsers signUp:user delegate:self];
      
      





рдпрд╛



 // login [QBUsers logInWithUserLogin:aLogin password:aPass delegate:self];
      
      





рдЗрди рдФрд░ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ completedWithResult:



рдЖрддреА рд╣реИред рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ completedWithResult:







рддрджрдиреБрд╕рд╛рд░, рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ UITextFields рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдФрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╡реЗрдВрдбрд░рдЖрдИрдбреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдпрд╛ред



3. рдЬреЛрдбрд╝реА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдВрдЧреНрд░рд╣рдг


рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдкреЗрдпрд░ рдЗрдХрд╛рдИ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдЖрдИрдбреА рдФрд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА (рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рджреВрд╕рд░рд╛ рдЙрдкрдХрд░рдг) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╣реАрдВ рднреА рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬрдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЙрдбреНрдпреВрд▓ рдиреЗ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХреА, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдХрд╕реНрдЯрдо рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред рддреЛ, рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛:



 QBCOCustomObject *customObject = [QBCOCustomObject customObject]; customObject.className = @"Pair"; // Object fields [customObject.fields setObject:@(userID) forKey:@тАЬopponentIDтАЭ]; customObject.userID = self.currentUser.ID; // permissions QBCOPermissions *permissions = [QBCOPermissions permissions]; permissions.readAccess = QBCOPermissionsAccessOpen; permissions.updateAccess = QBCOPermissionsAccessOpen; customObject.permissions = permissions; [QBCustomObjects createObject:customObject delegate:self]; - (void)completedWithResult:(Result *)result { QBCOCustomObjectResult *coResult = (QBCOCustomObjectResult *)result; if ([authResult isKindOfClass:[QBCOCustomObjectResult class]]) { // do something QBCOCustomObjectResult *customObjectResult = (QBCOCustomObjectResult *)result; BBPair *pair = [BBPair createEntityFromData:customObjectResult.object]; self.currentPair = pair; // .. } }
      
      





рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдЯреИрдм рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдкрдпреБрдХреНрдд рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреВрдВрдЧрд╛ (рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЦреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ - рдкреВрд░реНрдгрд╛рдВрдХ, рдлреНрд▓реЛрдЯ, рдмреВрд▓рд┐рдпрди, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдлрд╝рд╛рдЗрд▓)ред



рдпрджрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдерд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -



 NSMutableDictionary *getRequest = [NSMutableDictionary dictionary]; [getRequest setObject:@(self.currentUser.ID) forKey:@"user_id[or]"]; [getRequest setObject:@(self.currentUser.ID) forKey:@"opponentID[or]"]; [QBCustomObjects objectsWithClassName:@"Pair" extendedRequest:getRequest delegate:self];
      
      





рдпрд╣ рдХреНрд╡реЗрд░реА рдЙрди рд╕рднреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреА рд╣реИ рдЬрд╣рд╛рдБ рджрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рддреЛ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рд╣реИрдВред



рдПрдХ рдХрд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рднреА рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕рдХреА рдЖрдИрдбреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



 NSString *className = @"Pair"; [QBCustomObjects deleteObjectWithID:self.currentPair.pairID className:className delegate:self];
      
      





рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдпрд╣ рддрдм рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ ipad / ipod / iphone рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╣рдордиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдЗрд╕ рдмрдЯрди "рдЕрдирдкреЗрдпрд░" рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИред



4. рдкреНрд░рд╕рд╛рд░рдг рд╡реАрдбрд┐рдпреЛ


рдпрд╣ рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рддреНрд░ рдФрд░ рд▓реЙрдЧрд┐рди рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЪреИрдЯ рдореЗрдВ рднреА рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рд╡реАрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪреИрдЯ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -



 [QBChat instance].delegate = self; [[QBChat instance] loginWithUser:self.currentUser]; // self.currentUser - QBUUser
      
      





рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЪреИрдЯ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рдПрдХ рд╡рд┐рдзрд┐ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдХрд╛рдо рдХрд░реЗрдЧреА:



 -(void)chatDidLogin { self.presenceTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:[QBChat instance] selector:@selector(sendPresence) userInfo:nil repeats:YES]; } -(void)chatDidNotLogin { } -(void)chatDidFailWithError:(NSInteger)code { }
      
      





рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рддреБрд░рдВрдд рдЯрд╛рдЗрдорд░ рдкрд░ рдПрдХ рд╕рдлрд▓ рд▓реЙрдЧрд┐рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рднреЗрдЬрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдмрд┐рдирд╛, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдХрд╣реАрдВ рднреА рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред



рдпрджрд┐ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЖрдк рд╕рдмрд╕реЗ рдХрдард┐рди рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ QBVideoChat рд╡рд░реНрдЧ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИред



рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ



 self.videoChat = [[QBChat instance] createAndRegisterVideoChatInstance];
      
      





рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдФрд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдзреНрд╡рдирд┐ рдХреА рд╕реНрдерд┐рддрд┐ (/ рдмрдВрдж) рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрд╕реБрдореЗрд░рдХреЗрд░рд╛:



 self.videoChat.viewToRenderOwnVideoStream = myView; self.videoChat.viewToRenderOwnVideoStream = opponentView; self.videoChat.useHeadphone = NO; self.videoChat.useBackCamera = NO; self.videoChat.microphoneEnabled = YES;
      
      





рдФрд░ рдХреЙрд▓ рдХрд░реЗрдВ:



 [self.videoChat callUser:currentPair.opponentID conferenceType:QBVideoChatConferenceTypeAudioAndVideo];
      
      







рдЕрдЧрд▓рд╛ рдХрджрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд░реЛрдзреА рдХреЛ рдирд┐рдореНрди рд╡рд┐рдзрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:



 -(void) chatDidReceiveCallRequestFromUser:(NSUInteger)userID withSessionID:(NSString *)_sessionID conferenceType:(enum QBVideoChatConferenceType)conferenceType { self.videoChat = [[QBChat instance] createAndRegisterVideoChatInstanceWithSessionID:_sessionID]; // video chat setup self.videoChat.viewToRenderOwnVideoStream = nil; self.videoChat.useHeadphone = NO; self.videoChat.useBackCamera = NO; if (self.videoSide == BBVideoParentSide) { self.videoChat.viewToRenderOpponentVideoStream = self.renderView; self.videoChat.viewToRenderOwnVideoStream = nil; self.videoChat.microphoneEnabled = NO; }else if (self.videoSide == BBVideoChildSide) { self.videoChat.viewToRenderOpponentVideoStream = nil; self.videoChat.viewToRenderOwnVideoStream = self.renderView; self.videoChat.microphoneEnabled = NO; } BBPair *currentPair = [QBClient shared].currentPair; [self.videoChat acceptCallWithOpponentID:currentPair.opponentID conferenceType:QBVideoChatConferenceTypeAudioAndVideo]; }
      
      





рдпрд╛



 -(void) chatCallUserDidNotAnswer:(NSUInteger)userID { }
      
      





рд╣рдо рдПрдХ рд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ :) рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рджреГрд╢реНрдп рдФрд░ рдзреНрд╡рдирд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рд╣рдо рдХреЙрд▓ рд╕рд░реНрдЬрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рднреЗрдЬрддреЗ рд╣реИрдВред



рдЙрд╕рдХрд╛ рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП



 -(void) chatCallDidAcceptByUser:(NSUInteger)userID { }
      
      





рдФрд░ рдлрд┐рд░ рдпрд╣ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛



 -(void)chatCallDidStartWithUser:(NSUInteger)userID sessionID:(NSString *)sessionID { }
      
      





рдпрд╣ рд╡рд┐рдзрд┐ рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрдкрд┐рдирд░ рдХреЛ рд╕реНрдкрд┐рди рдХрд░рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рдпрд╣ рдкреВрд░реА рдмрд╛рдд рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓рд┐рдВрдЧ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред



рдЬрдм рдЖрдкрдХреЛ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ "рд╣реИрдВрдЧ" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ - рдХреЙрд▓ рдХрд░реЗрдВ



 [self.videoChat finishCall];
      
      





рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ



 -(void)chatCallDidStopByUser:(NSUInteger)userID status:(NSString *)status { }
      
      





рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдорд╛рдирдХ рдСрдбрд┐рдпреЛ-рд╡реАрдбрд┐рдпреЛ рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреАрдУрдЖрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ - рдпрджрд┐ рдЖрдкрдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдФрд░ рдСрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░реЗрдВ - рддреЛ рдЖрдк рдмреЗрд╣рддрд░ рдХрд╕реНрдЯрдо рдСрдбрд┐рдпреЛ-рд╡реАрдбрд┐рдпреЛ рд╕рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрд╕рдбреАрдХреЗ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: http://quickblox.com/developers/SimpleSample-videochat-ios#Use_custom_capture_session



рддреЛ, рд╡реАрдбрд┐рдпреЛ рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдЖрдЦрд┐рд░реА рдХрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдХреЗ рдЙрдкрдХрд░рдг рдкрд░ рдПрдХ рд▓реЛрд░реА рдХреЗ рд╕рдорд╛рд╡реЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рдХреИрдорд░рд╛ рдмрджрд▓рдирд╛, рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрдирд╛ рдЖрджрд┐ред

рдпрд╣ рд╕рдм рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдЪреИрдЯ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рд╣реИ? рддреЛ - рдпрд╣ рдПрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЪреИрдЯ :)

рдпрд╣ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЬреЛ рдХрд░реЗрдВрдЧреЗ рд╡рд╣ рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВрдЧреЗ, рдФрд░ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдВрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░реЗрдВ - рдлреНрд▓реИрд╢ рдЪрд╛рд▓реВ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ рдХреБрдЫ рдФрд░ред



рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╕рд░рд▓ рд╣реИ (рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦрд╛) -



 -(void) sendServiceMessageWithText:(NSString *)text parameters:(NSMutableDictionary *)parameters{ BBPair *currentPair = [QBClient shared].currentPair; QBChatMessage *message = [QBChatMessage new]; message.text = text; message.senderID = currentPair.myID; message.recipientID = currentPair.opponentID; if (parameters) message.customParameters = parameters; [[QBChat instance] sendMessage:message]; }
      
      





рдкрд╛рда рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рд╣реИред



рдПрдХ рд╕рдВрджреЗрд╢ рдпрд╣рд╛рдБ рдЖрддрд╛ рд╣реИ -



 -(void)chatDidReceiveMessage:(QBChatMessage *)message { if ([message.text isEqualToString:kRouteFlashMessage]) { // .. do something }else if ([message.text isEqualToString:kRouteCameraMessage]) { // .. } }
      
      





рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдпреВрдЖрдИ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛ред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рджреЛ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:



1) рд╕рддреНрд░ рдХрд╛ рдЬреАрд╡рди 2 рдШрдВрдЯреЗ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдг рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╡реАрдиреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЖрдзреЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЕрдиреБрд░реЛрдз рдХреА рдорджрдж рд╕реЗ:



 QBASessionCreationRequest *extendedRequest = [QBASessionCreationRequest new]; extendedRequest.userLogin = self.currentUser.login; extendedRequest.userPassword = self.currentUser.password; [QBAuth createSessionWithExtendedRequest:extendedRequest delegate:self];
      
      





рдЖрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ApplicationWillEnterForeground рдореЗрдВ рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



2) рд╡рд┐рдзрд┐ - (void)completedWithResult:(Result *)result



рдмрд╣реБрдд рдЬрд▓реНрджреА рдмрдврд╝рддрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдЧрднрдЧ рд╣рд░ рд╡рд┐рдзрд┐ 2 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╣реИ - рд╕рд░рд▓ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рдеред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВред рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╣рд╛рдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ:



 typedef void (^qbSessionBlock)(BOOL isCreated, NSError *anError); -(void) createSessionWithBlock:(qbSessionBlock)aBlock { void (^block)(Result *) = ^(Result *result) { if (!result.success) { aBlock(NO, [self errorWithQBResult:result]); } else { aBlock(YES, nil); } }; [QBAuth createSessionWithDelegate:self context:(__bridge_retained void *)(block)]; } - (void)completedWithResult:(Result *)result context:(void *)contextInfo { void(^myBlock)(Result *result) = (__bridge void (^)(Result *__strong))(contextInfo); myBlock(result); Block_release(contextInfo); }
      
      





рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред



рдпрд╣, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рднреА рд╣реИред рдпрджрд┐ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдпрд╣рд╛рдВ рдЖрдк рдпрд╣ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ Apple рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдпреВрдПрд╕ рдРрдкрд╕реНрдЯреЛрд░ рдореЗрдВ рдЖрдпрд╛ рдерд╛ рдФрд░ рддреАрди рдореЗрдВ рд╕реЗ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА, рд╡реАрдбрд┐рдпреЛ рдореЙрдирд┐рдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд┐рдХрд▓рд╛ред рд╣рдо рдЖрдИрдУрдПрд╕, рдПрдВрдбреНрд░реЙрдЗрдб, рд╡реЗрдм рдХреЗ рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдбреЗрдЯрд┐рдВрдЧ / рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдпрд╛ рд╕реБрд░рдХреНрд╖рд╛ / рд╡реАрдбрд┐рдпреЛ рдирд┐рдЧрд░рд╛рдиреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рд▓рд╛рд╣ рдпрд╛ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВред



All Articles