FirebaseCaller.php 4.0 KB

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