質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

169閲覧

LINEのLIFF上で、GASを用いてLINEのユーザーIDを取得して表示させたい

ha_tsu

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2024/08/31 07:32

実現したいこと

最終的にしたいこと

最終的には、LINEアプリ内で、LINE公式アカウントからLINE内部ブラウザでWEBアプリを開いて、名前を入力させて、今後再度LINEアクセスしたアプリ内からアクセスした際には同一ユーザーであれば既に回答済みですと表示したいです。

今回実現したいこと

今回はその前段階で、WEBアプリを開いたときにLINEのユーザーIDを取得して表示だけをするWEBアプリを作成したいです。

発生している問題・分からないこと

GASのコードとhtmlは作成して、実際に端末に表示はされるのですが、LINEのユーザー情報の取得がうまくできない状況です。
なぜ取得できないのかがわからず教えていただきたいです。

該当のソースコード

gas

1function doGet(e) { 2 // HTMLテンプレートを読み込む 3 return HtmlService.createTemplateFromFile('index.html') 4 .evaluate() 5 // HTML の head 内に GAS のウェブアプリ URL を埋め込む 6 .addMetaTag('gas-web-app-url', ScriptApp.getService().getUrl()); 7} 8 9function doPost(e) { 10 // LIFFアプリから送信されたIDトークンを取得 11 const idToken = e.parameter.id_token; 12 const channelId = 'YOUR_LINE_LOGIN_CHANNEL_ID'; // 正しい LINE ログインチャネルのチャネル ID に置き換えてください 13 14 // IDトークンを検証し、ユーザーIDを取得 15 const userId = verifyIdToken(idToken, channelId); 16 17 // ユーザーIDをJSON形式で返す 18 return ContentService.createTextOutput(JSON.stringify({ userId: userId })) 19 .setMimeType(ContentService.MimeType.JSON); 20} 21 22function verifyIdToken(idToken, channelId) { 23 // LINEのAPIを使用してIDトークンを検証 24 const url = 'https://api.line.me/oauth2/v2.1/verify'; 25 const options = { 26 'method': 'post', 27 'payload': { 28 'id_token': idToken, 29 'client_id': channelId 30 } 31 }; 32 33 try { 34 const response = UrlFetchApp.fetch(url, options); 35 const verifiedData = JSON.parse(response.getContentText()); 36 37 38 // 検証結果からユーザーIDを返す 39 return verifiedData.sub; 40 } catch (error) { 41 } 42}

html

1<!DOCTYPE html> 2<html> 3<head> 4 <title>LIFF ユーザーID表示</title> 5 <script src="https://static.line-scdn.net/liff/edge/2/sdk.js"></script> 6 <script> 7 window.onload = function() { 8 const liffId = 'YOUR_LIFF_ID'; // 正しい LIFF ID に置き換えてください 9 10 // GAS のウェブアプリ URL を meta タグから取得 11 const gasWebAppUrl = document.querySelector('meta[name="gas-web-app-url"]').content; 12 13 liff.init({ liffId: liffId }) 14 .then(() => { 15 console.log('LIFF SDK initialized'); 16 if (liff.isLoggedIn()) { 17 getUserId(gasWebAppUrl); // GAS のウェブアプリ URL を渡す 18 } else { 19 liff.login(); 20 } 21 }) 22 .catch((err) => { 23 console.error('LIFF SDK initialization failed:', err); 24 }); 25 }; 26 27 function getUserId(gasWebAppUrl) { // GAS のウェブアプリ URL を受け取る 28 const idToken = liff.getIDToken(); 29 30 // IDトークンをGASに送信 31 fetch(gasWebAppUrl, { // 取得した GAS のウェブアプリ URL を使用する 32 method: 'POST', 33 headers: { 34 'Content-Type': 'application/x-www-form-urlencoded' 35 }, 36 body: 'id_token=' + idToken 37 }) 38 .then(response => response.json()) 39 .then(data => { 40 // GASから返されたユーザーIDを表示 41 document.getElementById('userId').textContent = data.userId; 42 }) 43 .catch((err) => { 44 console.error('Error fetching user ID:', err); 45 }); 46 } 47 </script> 48</head> 49<body> 50 <h1>あなたのLINEユーザーID</h1> 51 <p id="userId"></p> 52</body> 53</html>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様のことをしようとしている方がいましたが、この方も同じくユーザー情報の取得に失敗していたようです。
https://makimakimakino.hatenablog.com/entry/2019/04/20/125203

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GAS側のセキュリティがガチガチな関係で、GASでデプロイしたindex.htmlに対しては、LIFFの認証は通りません。
index.htmlの部分は、VercelかFirebase等の融通の利く外部ホスティングサービスにデプロイするようにしてください。やり方は自分で調べてください。
参考:https://qiita.com/njn0te/items/b35a6eb6fa88372b4dc0

投稿2024/08/31 07:55

patapi

総合スコア808

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ha_tsu

2024/08/31 12:25

なるほど、どれだけ試してみても無理な理由がわかりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問