Skip to content

Instantly share code, notes, and snippets.

View d-sea's full-sized avatar

Hiro Fukami d-sea

View GitHub Profile
@d-sea
d-sea / purchase_products_list.dart
Last active October 13, 2023 04:16
flutter in_app_purchase products widget
import 'dart:async';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
import 'package:cloud_functions/cloud_functions.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:in_app_purchase_storekit/in_app_purchase_storekit.dart';
import 'package:in_app_purchase_storekit/store_kit_wrappers.dart';
@d-sea
d-sea / purchase.js
Last active October 13, 2023 05:20
firebase functions Android レシートデータを検証してlatest_receiptを返す
const PACKAGE_NAME_ANDROID = "(PUT YOUR APP PACKAGE NAME. ex. com.example.your.app)";
const RECEIPT_VERIFICATION_ENDPOINT_FRO_ANDROID = "https://androidpublisher.googleapis.com/androidpublisher/v3/applications/";
const SERVICE_CLIENT_EMAIL_FOR_ANDROID = "(PUT YOUR CLIENT EMAIL)";
const SERVICE_PRIVATE_KEY_FOR_ANDROID = "(PUT YOUR PRIVATE KEY)"
// Android検証用のAuthClient
const authClient = new google.auth.JWT({
email: SERVICE_CLIENT_EMAIL_FOR_ANDROID,
@d-sea
d-sea / purchase.js
Last active October 11, 2023 23:28
firebase functions iOS レシートデータを検証してlatest_receiptを返す
// 定期 最終支払 検証用
const PACKAGE_NAME_IOS = "(PUT YOUR APP PACKAGE NAME. ex. com.example.your.app)";
const RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_SANDBOX = "https://sandbox.itunes.apple.com/verifyReceipt";
const RECEIPT_VERIFICATION_ENDPOINT_FOR_IOS_PROD = "https://buy.itunes.apple.com/verifyReceipt";
const RECEIPT_VERIFICATION_PASSWORD_FOR_IOS = "(PUT YOUR VERIFICATION PASSWORD)";
async function verifyReceiptIos(verificationData, auth) {
let response;
@d-sea
d-sea / purchase.js
Last active October 19, 2023 23:48
firebase functions Android サブスク更新をチェックして最新レシートをFirestoreに保存する
exports.verifySubscriptionAndroid = functions.pubsub.schedule('0 2 * * 0').timeZone('Asia/Tokyo').onRun(async (context) => {
// 該当レシートを検索
const now = Date.now();
const termTime = 24 * 60 * 60 * 1000; // 24時間間隔でチェックするため
const minTime = now - termTime;
const receiptsSnapshot = await admin.firestore().collectionGroup("receipts")
.where("expires_date_ms", "<=", now)
.where("expires_date_ms", ">", minTime)
.orderBy("expires_date_ms")
@d-sea
d-sea / purchase.js
Last active October 19, 2023 23:49
firebase functions iOS サブスク更新をチェックして最新レシートをFirestoreに保存する
exports.verifySubscriptionIos = functions.pubsub.schedule('0 1 * * 0').timeZone('Asia/Tokyo').onRun(async (context) => {
// 該当レシートを検索
const now = Date.now();
const termTime = 24 * 60 * 60 * 1000; // 24時間間隔でチェックするため
const minTime = now - termTime;
const receiptsSnapshot = await admin.firestore().collectionGroup("receipts")
.where("expires_date_ms", "<=", now)
.where("expires_date_ms", ">", minTime)
.orderBy("expires_date_ms")
@d-sea
d-sea / purchase.js
Last active October 11, 2023 08:24
firebase functions verifyAndroid Android 購入を検証してFirestoreに保存する
exports.verifyAndroid = functions.https.onCall(async (data, context) => {
if (context.auth === null) {
return { result: NO_AUTH };
}
const uid = context.auth.uid;
const verificationData = data["data"];
const latestReceipt = await verifyReceiptAndroid(
verificationData,
@d-sea
d-sea / purchase.js
Created October 11, 2023 07:40
firebase functions verifyIos iOS 購入を検証してFirestoreに保存する
exports.verifyIos = functions.https.onCall(async (data, context) => {
if (context.auth === null) {
return { result: NO_AUTH };
}
const uid = context.auth.uid;
const verificationData = data["data"];
const latestReceipt = await verifyReceiptIos(
verificationData,
@d-sea
d-sea / Dockerfile
Created March 31, 2021 00:54
Ruby on Rails Docker file (Ruby on Rails + Vue.js + MySQL)
FROM ruby:2.6.6
# Japanese fonts
RUN apt-get update && apt-get install -y locales && \
locale-gen ja_JP.UTF-8 && \
apt-get install -y fonts-vlgothic
ENV LANG ja_JP.UTF-8
ENV LC_CTYPE ja_JP.UTF-8
RUN localedef -f UTF-8 -i ja_JP ja_JP.utf8
@d-sea
d-sea / docker-compose.yml
Created March 31, 2021 00:52
Ruby on Rails + Vue.js + MySQL docker-compose.yml
version: '3'
services:
web:
# image: ruby:2.6.6
build:
context: .
dockerfile: Dockerfile-web
depends_on:
- db
ports:
@d-sea
d-sea / okini-sample.rb
Created August 28, 2020 06:38
買い忘れ防止のためのメール通知スクリプト (使い切る前に買い時をお知らせ。特定の日にちサイクルで通知する)
require 'date'
require 'mail'
require 'json'
notify_term = 7
buy_now_body = ""
yet_body = ""
File.open("item-list.json", "r+:UTF-8") do |f|