FirebaseCaller.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <?php
  2. require __DIR__ . "/../vendor/autoload.php";
  3. use Kreait\Firebase\Factory;
  4. use Kreait\Firebase\Messaging\Notification;
  5. use Kreait\Firebase\Messaging\CloudMessage;
  6. use Kreait\Firebase\Messaging\FcmOptions;
  7. // Connection to db
  8. $hostname = 'localhost';
  9. $username = 'narKampen';
  10. $pass = 'IfRLzj2HJBXA9eei';
  11. $database = 'narKampen';
  12. $conn = new mysqli($hostname, $username, $pass, $database);
  13. if (!$conn) {
  14. die("Connection Failed. ". mysqli_connect_error());
  15. }
  16. mysqli_set_charset($conn,'utf8');
  17. // Constants
  18. $messageType = $conn->real_escape_string(isset($_POST['type'])?$_POST['type']:"");
  19. $title = $conn->real_escape_string($_POST['title']);
  20. $messageToSend = $conn->real_escape_string($_POST['message']);
  21. $gameId = $conn->real_escape_string($_POST['gameId']);
  22. if ($messageType === "FCMNextPlayer") {
  23. $playerName = $conn->real_escape_string($_POST['playerName']);
  24. $deviceToken = getToken($conn, $gameId, $playerName);
  25. if ($deviceToken != null && $deviceToken != "") {
  26. sendMessage($title, $messageToSend, $deviceToken, "NextPlayer");
  27. }
  28. } else if ($messageType === "gameFinishedMessage") {
  29. $i = 0;
  30. while ($_POST['player' . $i] != null) {
  31. $deviceToken = getToken($conn, $gameId, $conn->real_escape_string($_POST['player' . $i]));
  32. sendMessage($title, $messageToSend, $deviceToken, "GameFinished");
  33. }
  34. } else if ($messageType === "InviteMessage") {
  35. $i = 0;
  36. while ($_POST['player' . $i] != null) {
  37. $deviceToken = getToken($conn, $gameId, $conn->real_escape_string($_POST['player' . $i]));
  38. sendMessage($title, $messageToSend, $deviceToken, "GameInvite");
  39. }
  40. }
  41. function sendMessage($title, $messageToSend, $deviceToken, $tag = "") {
  42. $factory = (new Factory)->withServiceAccount("../narkampen-firebase-adminsdk-k42j5-d3d0354e37.json");
  43. $messaging = $factory->createMessaging();
  44. $notification = Notification::create($title, $messageToSend);
  45. if ($tag !== "") {
  46. $fcmOptions = FcmOptions::create()->withAnalyticsLabel($tag);
  47. }
  48. if ($fcmOptions != null) {
  49. $message = CloudMessage::withTarget(
  50. 'token', $deviceToken)
  51. ->withNotification($notification)
  52. ->withFcmOptions($fcmOptions);
  53. } else {
  54. $message = CloudMessage::withTarget(
  55. 'token', $deviceToken)
  56. ->withNotification($notification);
  57. }
  58. $messaging->send($message);
  59. }
  60. /*
  61. // NOTIFICATION EXAMPLE
  62. $title = 'My Notification Title';
  63. $body = 'My Notification Body';
  64. $imageUrl = 'http://lorempixel.com/400/200/';
  65. $notification = Notification::fromArray([
  66. 'title' => $title,
  67. 'body' => $body,
  68. 'image' => $imageUrl,
  69. ]);
  70. $notification = Notification::create($title, $body);
  71. $changedNotification = $notification
  72. ->withTitle('Changed title')
  73. ->withBody('Changed body')
  74. ->withImageUrl('http://lorempixel.com/200/400/');
  75. $message->withNotification($notification);
  76. // NOTIFICATION EXAMPLE END
  77. // DATA Example
  78. $data = [
  79. 'first key' => "First value",
  80. "second key" => "Second value"];
  81. $message->withData($data);
  82. // DATA EXAMPLE END
  83. $message = CloudMessage::withTarget('token', $deviceToken)
  84. ->withNotification($notification) // OPTIONAL
  85. ->withData($data); // OPTIONAL
  86. $message = CloudMessage::fromArray([
  87. 'token' => $deviceToken,
  88. 'notification' => [],
  89. 'data' => []
  90. ]);
  91. $messaging->send($message);
  92. */
  93. function getToken($conn, $gameId, $playerName) {
  94. $sql = "SELECT messageToken FROM `gamePlayers` INNER JOIN users ON users.id = playerId WHERE gameId = $gameId and users.username = '$playerName'";
  95. $result = $conn->query($sql);
  96. if ($result->num_rows == 1) {
  97. $returnArray = array();
  98. $data = $result->fetch_assoc();
  99. $token = $data['messageToken'];
  100. } else {
  101. echo "No games found for user";
  102. }
  103. return $token;
  104. }