iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
2
自我挑戰組

用 laravel 尻出自己形狀的 line bot,還要撐三十天!系列 第 4

【第四天】推送通知PUSH! Part1(1/2)

  • 分享至 

  • xImage
  •  

【第四天】推送通知PUSH! Part1(1/2)

還記得前天我們已經把LINEBot的provider寫完了嗎?
今天就來實作推送通知看看吧!

首先,在你的專案底下新增LineBotService.php,裡面先長這樣
https://ithelp.ithome.com.tw/upload/images/20171209/201073805E9sphPHj6.png

<?php
namespace App\Services;

class LineBotService
{
    /** @var LINEBot */
    private $lineBot;
    private $lineUserId;

    public function __construct($lineUserId)
    {
        $this->lineUserId = $lineUserId;
        $this->lineBot = app(LINEBot::class);
    }

    public function fake()
    {
    }

    /**
     * @param TemplateMessageBuilder|string $content
     * @return Response
     */
    public function pushMessage($content): Response
    {
        if (is_string($content)) {
            $content = new TextMessageBuilder($content);
        }
        return $this->lineBot->pushMessage($this->lineUserId, $content);
    }
}

這時候會發現我一開始就要拿這物件時,就要先給他$lineUserId
這樣有熟悉的感覺嗎?
沒錯,你的AppServiceProvider.php要再多加入這個! 參考


    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->lineBotRegister();
        $this->lineBotServiceRegister();
    }
    
    (...略)
    private function lineBotServiceRegister()
    {
        $this->app->singleton(LineBotService::class, function () {
            return new LineBotService(env('LINE_USER_ID'));
        });
    }

現在,你最基本的推送訊息已經做好了!試著寫些測試看看吧! 參考
https://ithelp.ithome.com.tw/upload/images/20171209/20107380Lj77uUU2sX.png

<?php
namespace Tests\Feature\Services;

use App\Services\LineBotService;
use Tests\TestCase;

class LineBotServiceTest extends TestCase
{
    /** @var  LineBotService */
    private $lineBotService;

    public function setUp()
    {
        parent::setUp(); // TODO: Change the autogenerated stub
        $this->lineBotService = app(LineBotService::class);
    }

    public function tearDown()
    {
        parent::tearDown(); // TODO: Change the autogenerated stub
    }

    public function testPushMessage()
    {
        $response = $this->lineBotService->pushMessage('Test from laravel.');

        $this->assertEquals(200, $response->getHTTPStatus());
    }
}

接著執行下面這串指令,你的手機應該就會收到Line的訊息了!記得要先把你的機器人加入自己賴的連絡人清單嘿!

php vendor/bin/phpunit tests/Feature/Services/LineBotServiceTest.php 

如果確定沒問題可以收到,可以加入以下這行!

    public function testPushMessage()
    {
        $this->markTestSkipped('OK!');
        (...略)
    }

先把他Skip起來,我們只要知道這功能可以實作就好~ 參考

https://ithelp.ithome.com.tw/upload/images/20171209/20107380eCIfbQTpVR.png
接下來你一定會想推送比較酷炫的樣板格式,最好是還能夾帶圖片的,這樣比較潮!
明天我們就來談談傳送樣板上遇到的雷吧!


上一篇
【第三天】今天星期五,就來說故事吧!
下一篇
【第五天】推送通知PUSH! Part2(2/2)
系列文
用 laravel 尻出自己形狀的 line bot,還要撐三十天!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言