FirebaseCaller.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 = $_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. if ($deviceToken != null && $deviceToken != "") {
  33. sendMessage($title, $messageToSend, $deviceToken, "GameFinished");
  34. }
  35. $i++;
  36. }
  37. } else if ($messageType === "InviteMessage") {
  38. $i = 0;
  39. while ($_POST['player' . $i] != null) {
  40. $deviceToken = getToken($conn, $gameId, $conn->real_escape_string($_POST['player' . $i]));
  41. if ($deviceToken != null && $deviceToken != "") {
  42. sendMessage($title, $messageToSend, $deviceToken, "GameInvite");
  43. }
  44. $i++;
  45. }
  46. }
  47. function sendMessage($title, $messageToSend, $deviceToken, $tag = "") {
  48. $factory = (new Factory)->withServiceAccount("../narkampen-firebase-adminsdk-k42j5-d3d0354e37.json");
  49. $messaging = $factory->createMessaging();
  50. $notification = Notification::create($title, $messageToSend);
  51. if ($tag !== "") {
  52. $fcmOptions = FcmOptions::create()->withAnalyticsLabel($tag);
  53. }
  54. if ($fcmOptions != null) {
  55. $message = CloudMessage::withTarget(
  56. 'token', $deviceToken)
  57. ->withNotification($notification)
  58. ->withFcmOptions($fcmOptions);
  59. } else {
  60. $message = CloudMessage::withTarget(
  61. 'token', $deviceToken)
  62. ->withNotification($notification);
  63. }
  64. file_put_contents("FirebaseCallerDebug.php", "Sending message with title $title", FILE_APPEND);
  65. $messaging->send($message);
  66. }
  67. /*
  68. // NOTIFICATION EXAMPLE
  69. $title = 'My Notification Title';
  70. $body = 'My Notification Body';
  71. $imageUrl = 'http://lorempixel.com/400/200/';
  72. $notification = Notification::fromArray([
  73. 'title' => $title,
  74. 'body' => $body,
  75. 'image' => $imageUrl,
  76. ]);
  77. $notification = Notification::create($title, $body);
  78. $changedNotification = $notification
  79. ->withTitle('Changed title')
  80. ->withBody('Changed body')
  81. ->withImageUrl('http://lorempixel.com/200/400/');
  82. $message->withNotification($notification);
  83. // NOTIFICATION EXAMPLE END
  84. // DATA Example
  85. $data = [
  86. 'first key' => "First value",
  87. "second key" => "Second value"];
  88. $message->withData($data);
  89. // DATA EXAMPLE END
  90. $message = CloudMessage::withTarget('token', $deviceToken)
  91. ->withNotification($notification) // OPTIONAL
  92. ->withData($data); // OPTIONAL
  93. $message = CloudMessage::fromArray([
  94. 'token' => $deviceToken,
  95. 'notification' => [],
  96. 'data' => []
  97. ]);
  98. $messaging->send($message);
  99. */
  100. function getToken($conn, $gameId, $playerName) {
  101. $sql = "SELECT messageToken FROM `gamePlayers` INNER JOIN users ON users.id = playerId WHERE gameId = $gameId and users.username = '$playerName'";
  102. $result = $conn->query($sql);
  103. if ($result->num_rows == 1) {
  104. $returnArray = array();
  105. $data = $result->fetch_assoc();
  106. $token = $data['messageToken'];
  107. } else {
  108. echo "No games found for user";
  109. }
  110. return $token;
  111. }