2020年07月15日

LINE Notifyをアプリに組み込む

https://www.itmedia.co.jp/news/articles/1912/01/news009.html
ここを見て、curlでちょっと試したら簡単にできたのでアプリに組み込もうと思ったらかなり苦労する羽目に…

上のリンクはアクセストークンを開発用に用意してるものを使ってるので簡単なのだけど、本番はサービスを登録してOAuth認証してアクセストークンをもらわないとならないよう。
(開発用)と書いてあるのを本番アプリで使わせるのも気が引けるし。(最初はそうしようと考えてたのは内緒)

LINE Notifyのドキュメントはこちら https://notify-bot.line.me/doc/ja/

一見簡単そうだけど、iOSでOAuth認証するのに一苦労…
OAuth認証のライブラリ?フレームワーク?はたくさんあるのだけど、どれを使ったらいいか(どれが簡単にLINE Notifyに使えるか)わからない。
古いアプリだったのでObjective-Cで書いてあるのだけど、OAuth-Swiftってのが簡単そうだったのでこれを使ってSwiftで書いたクラスをObjective-Cから呼ぼうと思ったら、呼べない…
SwiftのClass定義に@objcとか書けば使えると聞いてたのに…
まぁ、Objective-Cのライブラリもあるさと、次はGoogle謹製のAauthってライブラリを組み込んでみたら、このライブラリーscopeをNSData形式で受け渡すのだけど、LINE Notifyはscopeが"notify"という文字列指定でうまく行かない… 
仕方ないのでライブラリの方を改造して引数をNSStringにしてようやくOKになったと思ったら、今度は結果のcallbackURLが呼ばれないという謎…
理由がわからないのでライブラリーを使うのをやめて自力で書くことに。

そしたら、当然OAuthの仕様を全部理解しないといけないのだけど、まぁOAuthというのがセキュリティのこともあってちょっと複雑なことをやってて、アクセストークンを得るのに一回目はcallback先に指定したURLにリダイレクトして、その引数でcodeを渡すということをやってる。(このリダイレクトのURLにパラメータを埋め込む方式を思いついた人頭いいな)
最初勘違いしててこのcodeがアクセストークンのことだと思いこんでてうまくいかず。
で本当は2回目にそのcodeを使ってアクセストークンを取りに行くのだけど、今度はリダイレクト先のURLに埋め込んでcallbackでなくPOSTの返事で返してくる。(1回目はGETね)
最初、ここを勘違いして2回目のcallbackが返ってこないと悩む。
ようやくPOSTの返事ということに気がついてアクセストークンは取れたけど、今度はLINE Notifyに画像を送るのがうまくいかない… 文字は送れるのに…
で、いろいろ調べると、どうもmultipart形式で送らないといけないよう。
multipartなんてe-mailでしか使わないと思ってたらhttpでも使うのね。それもe-mailは8bit通らないからbase64とかでエンコードするけどhttpは8bit通るからmultipartの中身はバイナリーをそのまま送れる。(URL部分には記号を送れないので%数字でおなじみのurlencodeってのがあるけど)
で、ようやく動きましたとさ。1日あればできるだろうと舐めてたら1週間かかった…

iOSのAPIで不満だったのが、自動でメールを送る、というAPIがなくて、一度メールアプリが立ち上がって人間が送信ボタンを押さないといけなくて、昔自宅サーバーでやってたような何かあったときに自動でメールを送信して通知する、というのができなかったことなのだけど、これでアプリからの通知が自由にできるようになった。(LINEさんnotifyのサービスやめないでね)
けど、スマホをサーバー的に使うようなことはあまりないから使わないか…
1ボタンでLINEに”帰るコール”を送るアプリとか需要あるかな…
ラベル:アプリ製作
posted by one-hand-engineer at 08:35| Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: