「開発」カテゴリーアーカイブ

StoreKit2でシンプルな課金処理 第4回

課金処理の実装は、昨年実施された WWDC21 でStoreKit2紹介時にサンプルとして利用されたプロジェクトを参考に行います。

開発元のAppleが紹介しているサンプルなので、利用するコードとしては最高です。

このページのDownloadボタンからサンプルプロジェクトを取得してください。

ダウンロードして解凍後、SKDemo.xcodeprojを開いてプロジェクトを立ち上げます。

プロジェクト実行前に、このページの手順1〜4の設定を行わないと課金アイテムが表示されないので注意してください。

下記画像の赤部分です。

設定後、実行すれば、サンプルプロジェクトが正常に動作します。

次回からはこのプロジェクトを元に、自分のプロジェクトへ自動更新サブスクリプションの部分だけを移植、調整していくこととします。

(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾

StoreKit2でシンプルな課金処理 第3回

前回に引き続き、事前の設定作業を行なっていきます。


下記6箇所の設定を行います。

1.まずは、一番上に水色の背景色で表示されている「ローカライゼーションを追加」の文字をクリックします。プルダウンが表示されるので “日本語” を選択します。

「サブスクリプショングループ表示名」は、下記画像の赤丸部分の箇所で表示されます。ここでは “テキスト漫画サブスクリプション” としました。

「App名表示オプション」は、上記のサブスクリプショングループ表示名と共に表示される名前で、そのままでもOKです。右上の「保存」ボタン押下後、元の画面に戻ります。

2.次に「サブスクリプション期間」を設定します。1ヶ月ごとに¥120円としたいので、ここでは “1ヶ月” をプルダウンから選択しました。

3.「サブスクリプション価格」の右にある「+」をクリックし、価格を決定します。テキスト漫画は日本向けに売るので、通貨は “JPY – 日本 円”、価格は “¥120” を選択し、「次へ」をクリックします。

他の国の価格は、上記で選択した価格をベースに自動でセットされます。必要に応じて調整後「作成」をクリックします。

4.次は「ローカライゼーション」の右にある「+」をクリックします。プルダウンが表示されるので “日本語” を選択します。

「サブスクリプション表示名」はApp Store に表示される App 内課金の名前です。ここでは “お気に入り(¥120/月)” としました。

説明欄には、このサブスクリプションで実現可能な機能を記述します。文字数制限があるため簡潔に記述します。

5.次に、これは任意ですが、アプリ内課金用のイメージを指定します。

画像は 1024 x 1024 で指定します。下のチェックボックスをオンにすると、アプリをインストールしていないユーザがアプリストアでこのアプリを見たときに、どんなことが課金で実現できるのか確認できます。

6.最後に、「審査に関する情報」を設定します。

アプリ内課金で実現可能な機能を、スクリーンショットと共に文章での説明を行います。審査で利用されます。

(あまりにしょぼい機能だとリジェクトを喰らうと思います。自動更新サブスクリプションは特にそうだと思います・・・)

上記画像のようにステータスが「送信準備完了」となればOKです!(広告非表示のアプリ内課金も追加しました)

ついでに、上記画像右上の「App 用共用シークレット」をクリックして、あとで利用する「App用共有シークレット」のコードを生成しておきましょう。


以上で、App Store Connectでの設定はほぼ終わりました!

次回は Xcode を利用しての実装作業に入ります!!

(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾

StoreKit2でシンプルな課金処理 第2回

第2回は、事前準備のため、App Store Connectで必要な設定を行なっていきます。誰にでもわかるよう、ログイン画面から操作手順を解説していきます。

※アプリ開発経験者向けの課金処理に関する解説です。


1.App Store Connectにログインします。

2.「契約/税金/口座情報」をクリックします。

3.「有料App」のステータスが「アクティブ」になっていることを確認します。

※上記のようになっていなければ、「有料App」の文字をクリックして、口座情報などを正しく設定します。

4.App Store Connectログイン直後の画面に戻って「マイApp」をクリックします。

5.これから課金処理を実装する、あなたのアプリをクリックします! (※初回バージョンからアプリ内課金を実装する場合は8へ)

6.iOS App の右横の「+」をクリックします。

7.新しいバージョンを入力します。このバージョンからアプリ内課金が有効になります。

8.アプリ画面の左下にあるApp内課金から「管理」をクリックし、App内課金 (0) の右側にある「+」をクリックします。

9.課金タイプを選択します。今回は “自動更新サブスクリプション” を選択します。

10.「参照名」と「製品ID」を入力します。

「参照名」はApp Store Connect上のみで表示されます。自分があとで見て分かりやすい名前をつければ大丈夫です。作成後に変更可能です。

「製品ID」はあとで変更出来ません。他とかぶらない一意のIDを指定します。アプリの識別IDに加えて機能名や金額を指定すると良いと思います。

11.サブスクリプショングループを作成します。

「サブスクリプショングループ参照名」は、サブスクリプションの管理単位で、通常1つのアプリに対して1つあれば良いようです。App Store Connectおよび「売上とトレンド」のレポートでのみ表示されます。App Storeには表示されません。

1〜11の手順が終わると、下記のような画面になります。

(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾

長くなってきたので、第3回へ続きます。

StoreKit2でシンプルな課金処理 第1回

あけましておめでとうございます。本年もよろしくお願いいたします。

(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾

本年2022年はiPhoneアプリのテキスト漫画に課金処理を実装していきたいと思います。2022年1月時点で最新の Xcode (13.2.1) をベースに、iOS15で登場したStoreKit2を利用して誰でも確実に課金処理を実装できるよう、連載形式で少しずつ解説していきます。

※アプリ開発経験者向けの課金処理に関する解説です。


早速ですが、第1回はアプリ内課金の種類を説明します。

アプリ内課金には

1.消耗型
2.非消耗型
3.自動更新サブスクリプション
4.非自動更新サブスクリプション

の4種類があります。

1の消耗型は皆さん大好きなガチャを回すため、ゲーム内通貨を購入する際に利用されます。1回使ったら戻ってきません。お金は大切にしましょう。

2の非消耗型は、1回購入すればアカウントに紐づいて一生涯使い続けられるものです(アプリが無くならなければ)。アプリの広告をオフにする機能や、永続して使い続けられる非消耗型アイテム購入などがあります。

3の自動更新サブスクリプションは、キャンセルするまで継続的に課金されるタイプです。課金している間だけコンテンツへのアクセスが有効になったりします。ビデオ、音楽、記事、クラウドストレージなどへのアクセス権が一例です。課金をやめると利用不可になります。

4の非自動更新サブスクリプションには、シーズンパスなどがあります。自動的に更新されないため、都度購入する必要があります。

今回、テキスト漫画では3の自動更新サブスクリプションを実装予定です。現時点で結構な数のテキスト漫画が存在するため、その中から自分の気に入ったテキスト漫画だけを

お気に入り

に追加し、お気に入りだけを閲覧できる画面を実装します。

(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾

・・

・・・え?2の非消耗型でいいんじゃないかって?

ごめんなさい、サーバー代を稼がせてください。

サーバー代は継続してかかるんです。

     -ーー ,,_
   r'”      `ヽ,__
   \       ∩/ ̄ ̄ ヽつ
  ノ ̄\ /”ヽ/ ”   ノ   ヽi
 |  \_)\ .\    ・  ・ |\
 \ ~ )     \ .\_  ( _●_)\_つ
    ̄       \_つ

第2回へ続く・・・

M1 Mac で arm64版のhomebrewとnode(nodebrew) 2021年4月版

買ったばかりのM1 Macにarm64版のhomebrewとnode(nodebrew)をサクッと入れて行きます。

思ったよりさっくり入りました。

トラブルを恐れて、血の滲む思いで4ヶ月買うのを我慢

して良かったです。

homebrew

homebrewはApple M1 チップに正式対応済で、公式通りのインストール方法で良いようです。

% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”

インストール完了後、パスを通します。

% echo ‘eval “$(/opt/homebrew/bin/brew shellenv)”‘ >> /Users/name/.zprofile
% eval “$(/opt/homebrew/bin/brew shellenv)”

インストールされたバージョンを確認します。

% brew –version
Homebrew 3.0.11
Homebrew/homebrew-core (git revision 4dffd6ddcf; last commit 2021-04-09)

node(nodebrew)

nodeはv15.3.0以降のソースからコンパイルすればarm64版が使えるようです。

% brew install nodebrew
% nodebrew -v
nodebrew 1.0.1
% vim $(which nodebrew)

コンパイル前に vim $(which nodebrew) で以下箇所を修正して保存します。

sub system_info {
my $arch;
my ($sysname, $machine) = (POSIX::uname)[0, 4];
if ($machine =~ m/x86_64|arm64/) { // arm64を条件に追加
$arch = ‘arm64’; // arm64に変更

ホームに移動後、ディレクトリを作成します。その後、ls-remoteでリモート管理されているバージョンを確認します。

% cd ~
% mkdir -p ~/.nodebrew/src
% nodebrew ls-remote

確認後、入れたいバージョンをビルドしてそのバージョンに切り替えます。また、パスを通します。

% nodebrew compile v15.14.0
% nodebrew use v15.14.0
% echo “export PATH=$HOME/.nodebrew/current/bin:$PATH” >> ~/.zprofile
% source ~/.zprofile

バージョンを確認します。

% node -v
v15.14.0

       c⌒っ゚Д゚)っ
M1 Mac mini [16GB/1TB]

Oracle DYNにドメイン名を停止された話

先月2019/6/25に、自作iOSアプリ(側ネイティブアプリなど)およびそのサポートサイトである本サイトに長年利用していたドメイン名がブロックされました。DynDNSの時代から使っていたため、かれこれ15年以上利用していました。

事前警告など全くありません。なんの前触れもなくいきなり止められました。

停止した理由をOracle Dynに問い合わせましたが、しばらく返事がありませんでした。

10日後に、やっと返事がありました。返事は後にも先にもこれだけです。

Hello,

Thank you for contacting the Oracle Dyn Abuse team,

We have received multiple complaints against the hostname in your account, “ukaapple.selfip.com”. As your account has been identified as violating our AUP, it has been terminated. At this time your account will not be reinstated. Your account has also been refunded for current eligible services. For more information about our AUP please visit http://dyn.com/legal/acceptable-use-policy/

Oracle Dyn Abuse Team
abuse@dyn.com

複数件の苦情が入ったらしいです。

しかし、どんな苦情があって、どんな基準に違反したのか全くわからず、対処のしようがありません。

リンク先のAUPの規約を読むとわかるのですが、明確な基準はありません。Oracleの恣意的な判断で自由に決められるもので、あって無いような規約です。

どのような違反があったのか教えてくれと再度問い合わせましたが、それから今日まで返事がありません。もうすぐ1ヶ月経ちます。

Oracleの内部的な実情はわからず推測ですが、おそらく個人相手の商売は金にならないから軽視しているのでしょう。

問い合わせの返事が来るまでの期間や返事の内容を見ていると、サポートの体を成していません。

ドメイン名の回復が見込めなくなったため、新しいドメイン名を取得してアプリなどを改修することになりました。

かなりの改修コストがかかります。この改修コストをかけるなら、1本でも新しいアプリを開発したいところです。

Oracleのやっていることはほとんど犯罪だと思うのですが、どう対処すれば良いですかね?

個人で裁判するのはいろんな面で難しいし、消費者センターに駆け込む訳にも行かないし・・・

個人で出来ることは、なるべくOracleの息がかかったサービスは使わないくらいですかね・・・

.NET CoreでSystem.Drawingを使う Ubuntu編

Ubuntuにおいて、.NET CoreでSystem.Drawing配下のライブラリを扱う方法を記述します。
OpenTKにおいて、テクスチャなどを扱う際に必要です。

UbuntuでSystem.Drawing配下のライブラリ利用時に、以下のようなエラーが発生した場合の対処方法となります。

例外が発生しました: CLR/System.TypeInitializationException
An unhandled exception of type ‘System.TypeInitializationException’ occurred in System.Drawing.Common.dll: ‘The type initializer for ‘Gdip’ threw an exception.’
Inner exceptions found, see $exception in variables window for more details.
Innermost exception System.DllNotFoundException : Unable to load DLL ‘libgdiplus’: The specified module could not be found.


$ sudo apt-get update
$ sudo apt-get install libgdiplus

これだけ!
macに比べるととっても簡単です。

.NET CoreでSystem.Drawingを使う mac編

OS Xにおいて、.NET CoreでSystem.Drawing配下のライブラリを扱う方法を記述します。
OpenTKにおいて、テクスチャなどを扱う際に必要だったので・・・

まずは、X11をインストールします。ここからdmgをダウンロードしてインストールします。

インストール後はシンボリックリンクを貼っておきます。


ln -s /opt/X11/include/X11 /usr/local/include/X11

VSCodeを立ち上げ、Shift(⇧)+Command(⌘)+Pを押して “nuget” と打ちます。リストから「NuGet Package Manager: Add Package」を選択します。※NuGetインストール済みを想定

続いて “System.Drawing.Common” と打ってリターンキーを押下し、「System.Drawing.Common」を選択します。すると、インストール可能なバージョンリストが表示されるので選びます。特に理由がなければいちばん新しいバージョンを選びます。

次に、ターミナルからlibgdiplusをインストールします。事前に色々な依存ライブラリを入れてから、ソースを持ってきてメイク&インストールです。エラーやワーニングが出るかもしれません。柔軟に対応する必要があります。


$ brew install autoconf 
$ brew install pkg-config 
$ brew install readline 
$ brew install automake 
$ brew install gettext 
$ brew install glib 
$ brew install intltool 
$ brew install libtool 
$ brew install cairo
$ brew install jpeg
$ brew install libtiff
$ git clone https://github.com/mono/libgdiplus.git
$ cd libgdiplus
$ CPPFLAGS="-I/usr/local/opt/libpng12/include -I/opt/X11/include" LDFLAGS="-L/usr/local/opt/libpng12/lib -L/usr/X11/lib" ./autogen.sh
$ ./configure
$ make && make install

Linux/Windows/Mac共通で、C#によりOpenGL開発が出来る環境を構築

昨日はUbuntu 18.04 LTSに.NET Core SDKをインストールしました。

本日は、この環境へVisual Studio Code と OpenTK.NETCoreをインストールしていきます。

目的は、Linux/Windows/Mac共通で、C#によりOpenGL開発が出来る環境を構築することです。

Ubuntuで構築していますが、今回構築した環境で書いたC#コードはWindowsやMacでも動くはずです。たぶん。動くはずだ。動くといいなあぁ。動かないかなぁ(希望)

1.https://code.visualstudio.com/downloadからVisual Studio Codeをダウンロードします。Linux(.deb)を選びます。

2.端末から以下を実行してVisual Studio Codeをインストールします。


sudo dpkg -i <ダウンロードしたファイル>.deb
sudo apt-get install -f # Install dependencies

3.端末から以下を実行してVisual Studio Code を立ち上げます。


code .

4.C#のプラグインをインストール

左側に並んでいる5個のアイコンのうち、一番下の「拡張機能」をクリックします。(Ctrl+Shift+Xでも可)
“C#”と打ち、表示された「C# for Visual Studio Code (powered by OmniSharp) Microsoft」をインストールします。

5.nugetをインストール

同じく「拡張機能」で “nuget” と打ちます。表示された「NuGet Package Manager」をインストールします

6.OpenTK.NETCoreをインストール

Ctrl+Shift+Pを押して “nuget” と打ちます。リストから「NuGet Package Manager: Add Package」を選択します。
続いて “OpenTK” と打ってリターンキーを押下します。表示されたリストから「OpenTK.NETCore」を選択します。すると、インストール可能なバージョンリストが表示されるので選びます。特に理由がなければいちばん新しいバージョンを選びます。

7.さあ!C#でOpenGL開発が可能な環境が出来ました!作ったコードはWindowsでもMacでも動くよ!

        *'“・* 。 
        |     `*。 
       ,。∩      *  
      + (´・ω・`) *。+゚ 
      `*。 ヽ、  つ *゚* 
       `・+。*・' ゚⊃ +゚ 
       ☆   ∪~ 。*゚ 
        `・+。*・ ゚ 

たぶんね!次回以降は実際にOpenGLのコードを書いて、そのコードがWindows/Macでも動くか検証していきます。

Ubuntu 18.04 LTS への.NET Core SDKインストール方法

Ubuntu 18.04 LTSが出たばかりで.NET Core SDKのインストール方法が公式に載ってなかったので、メモっときます。


sudo apt-key adv --keyserver packages.microsoft.com --recv-keys EB3E94ADBE1229CF

sudo apt-key adv --keyserver packages.microsoft.com --recv-keys 52E16F86FEE04B979B07E28DB02C46DF417A0893

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-bionic-prod bionic main" > /etc/apt/sources.list.d/dotnetdev.list'

sudo apt-get update

sudo apt-get install dotnet-sdk-2.1.105 

以下、動作確認用です。プロジェクト用のディレクトリを作成して、その中で実行します。”Hello World!”と表示されれば成功です。


dotnet new console

dotnet run

((⊂(`ω´∩) しゅっしゅっ

2018/5/19追記:

公式のインストール手順出ました。

Register Microsoft key and feed


$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/prod.list 
$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list

Install .NET SDK


$ sudo apt-get install apt-transport-https
$ sudo apt-get update
$ sudo apt-get install dotnet-sdk-2.1.200