Отправить Push-уведомление с Flutter + OneSignal для PlayerID - PullRequest
0 голосов
/ 19 марта 2019

Я создаю push-систему в стиле календаря.Мне нужно, когда я создаю расписание для пользователя, система отправляет уведомление только ему, я создал систему для управления этим PHP, кто-нибудь знает, как мне помочь?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Если вы используете OneSignal. Вы можете отправить на это отдельное устройство с помощью Playerid, однако вы должны сохранить серверную часть playerid, чтобы вы знали, на какое устройство отправлять. Я лично делаю это в состоянии инициализации и делаю http.post для моего API, чтобы сохранить playerid в моей базе данных для этого конкретного пользователя.

Конечно, вы можете достичь того же, используя теги OneSignal (полезно, если у одного человека несколько учетных записей на одном устройстве).

Чтобы отправить уведомление, используйте curl в php.

<?php
function sendMessage(){
    $content = array(
        "en" => 'English Message'
        );

    $fields = array(
        'app_id' => "your-app-id",
        'include_player_ids' => array("playerid-you-want-to-send-to"),
        'data' => array("foo" => "bar"),
        'contents' => $content
    );

    $fields = json_encode($fields);
    print("\nJSON sent:\n");
    print($fields);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://onesignal.com/api/v1/notifications");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

$response = sendMessage();
$return["allresponses"] = $response;
$return = json_encode( $return);

print("\n\nJSON received:\n");
print($return);
print("\n");
?>

В Flutter получите пакет, импортируйте его и:

void oneSignal() {
OneSignal.shared.init("app-id");

OneSignal.shared.setNotificationReceivedHandler((OSNotification notification) 

   {
     //do what you need to do with upcoming notification, get title for example
     print(notification.payload.title);
   }
}
0 голосов
/ 19 марта 2019

Я далеко не эксперт по мобильным приложениям, поэтому кто-то должен исправить / подтвердить это.

Для выполнения push-уведомлений в вашем приложении вы можете использовать «живое» соединение (например, веб-сокет) или опрос.

Я не знаю много о веб-сокетах, и я не думаю, что это возможно с CakePHP (не уверен). РЕДАКТИРОВАТЬ: Определенно невозможно из коробки, но плагины существуют.

При использовании опроса вы повторяете запрос GET очень часто (один раз в час, один раз в минуту, в зависимости от потребностей) и проверяете, есть ли новая информация.
Например, ваша страница CakePHP может быть действием, принимающим аргумент lastUpdated, который возвращает новую информацию с этой отметки времени. Затем приложение запрашивает эту страницу каждые x минут, каждый раз устанавливая параметр lastUpdated. При появлении новой информации ответ будет не пустым, и приложение сможет его обработать.

Это означает, что приложение должно всегда работать в фоновом режиме, и количество запросов может стать значительным (в зависимости от интервала опроса).

...