Below approach may help you:
Write the respective function in helper class.
namespace PackageName\ModuleName\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
const API_ACCESS_KEY = "";//Api Access key for android.
const PASSPHASE = ""; // passphase for IOS
protected $dir;
/**
* @param \Magento\Framework\App\Helper\Context $context
* @param \Magento\Framework\Filesystem\DirectoryList $dir
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\Filesystem\DirectoryList $dir
) {
$this->dir = $dir;
parent::__construct($context);
}
/**
* send push notification for ios
*/
public function sendIosPushNotification($message,$devicetoken){
$mediaPath = $this->dir->getPath('media').'/';
$tCert = $mediaPath.'/iospemfile/pushcert.pem';// your certificates file location
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $tCert);
stream_context_set_option($ctx, 'ssl', 'passphrase', self::PASSPHASE);
$applegateway='ssl://gateway.sandbox.push.apple.com:2195';//for sanbox mode
//$applegateway='ssl://gateway.push.apple.com:2195';//for production mode
$fp = stream_socket_client($applegateway, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)exit("Failed to connect: $err $errstr" . PHP_EOL);
$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
'badge' => 1,
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $devicetoken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
//set blocking
stream_set_blocking($fp,0);
//usleep(500000);
//Check response
$apple_error_response = fread($fp, 6);
$error_response = unpack('Ccommand/Cstatus_code/Nidentifier', $apple_error_response); //unpack the error response (first byte 'command" should always be 8)
// Close the connection to the server
fclose($fp);
if (!$result)
return 'Message not delivered' . PHP_EOL;
else
return 'Message successfully delivered' . PHP_EOL;
}
/**
* send push notification for android
*/
public function sendAndroidPushNotification($message,$fcmtoken){
$data = array('message' => $message,'title' => 'test title') ;
$fields = array('data' => $data ,'to' => $fcmtoken);
$headers = array(
'Authorization: key=' . self::API_ACCESS_KEY,
'Content-Type: application/json'
);
#Send Reponse To FireBase Server
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
}
}
After that you can use those helper functions from anywhere by injecting the helper class in constructor of the where you want to use those functions:
If your helper class object is $this->notificationHelper then you can call the functions following way:
//for ios
$msg = "test push for ios";
$deviceToken = "iosdevicetoken";
$this->notificationHelper->sendIosPushNotification($msg ,$deviceToken);
//for android
$msg = "test push for android";
$fcmToken = "fcmToken ";
$this->notificationHelper->sendAndroidPushNotification($msg ,$fcmToken );
Best Answer
Magento has built in REST APIs for most of the features like products, customers, inventory, customer address, orders. You can find more information on the devdocs here.
Here are few REST URLs
Base URL for REST APIs: http://YOUR_DOMAIN_NAME/api/rest
You need to use oAuth to authenticate the APIs. Learn more here.
I hope this helps.