⛩️

アプリにユーザー投稿の機能を実装する際の注意点

2021/01/07に公開

背景

2021/1/1に初詣オンラインというアプリをリリースしました。
http://onelink.to/moude
(初詣シーズン限定のアプリということで、2021/1月中旬までしか公開しておりません)
今年はリモートで初詣した方がいいよねということで12月から2週間程度でバーっと作ってみました。
その中で絵馬が書ける機能を作りました。


(一応投稿内容は黒塗りしています)
AppStoreの審査に出した際にこれはUserGeneratedContentであると判断されてリジェクトされたり、公開後に荒らし行為にあったりしてその対応を行ったので、注意点をまとめておこうと思います。
実装自体はFirebaseのFirestoreで行いました。(そのときのスクラップはこちら)

実装要件

当初は以下のような最低限の内容を管理し、一覧で表示する機能でした。

  • 投稿日時
  • 投稿者名
  • 投稿内容

返信やコメントの機能は無いです。

対応すべき内容

AppStoreのリジェクト

審査に出した際、AppStoreからは以下の内容でリジェクトされました。

Guideline 1.2 - Safety - User Generated Content

Your app enables the display of user-generated content but does not have the proper precautions in place.

Next Steps

To resolve this issue, please revise your app to implement all of the following precautions:

- Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content or abusive users
- A method for filtering objectionable content
- A mechanism for users to flag objectionable content
- A mechanism for users to block abusive users
- The developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content

訳すと

  1. 利用規約に同意してから投稿するようにして
  2. 不適切なコンテンツをフィルタリングする仕組みを用意して
  3. 不適切なコンテンツをユーザーが報告できる仕組みを用意して
  4. 不適切なユーザーをブロックできる仕組みを用意して
  5. 開発者はユーザーからの報告があったら24時間以内に消して

という内容です

5に関しては機能がリリースされた後の対応の話なので、審査に通すには1~4の対応が必要になります。

意図的な荒らし行為

リジェクトには関係ないけどリリース後に困ったものとして、一部のユーザーによる以下の投稿がありました。

  1. 空白・空白文字コードによる投稿
  2. 連投(不適切な単語・個人情報等を含む)
  3. テキストタグを使用した見た目の変更

自分はいつも性善説的かつ楽観的に「まあわざわざそんなことはしないだろう」という前提のもとで機能を実装してしまうことが多いのですが、悲しいことに意図的な迷惑行為がいくつか見られたので、そちらも対応をしました。

実装したこと

ユーザー投稿コンテンツの初回表示前に利用規約ダイアログを表示する

(追記:利欲規約になっていることに記事を見返していて気づく_(:3 」∠ )_

投稿の報告機能

投稿内に報告ボタンを追加し、問題があったコンテンツのIDを報告出来るようにしました。
自前のサーバーに送る方式やGoogleFormのAPIを叩く方式を検討しましたが、コストをかけたくなかったのでメールで直で送ってもらうようにしました。

ユーザーのブロック機能

ユーザーのID表示

なりすましの防止です。当アプリでは名前の重複を弾く仕組みはないので、なりすまそうと思えば簡単にできてしまいます。なのでIDを表示するようにしました。
ユーザーさんに対してUUIDを割り振るようにしているので、投稿時のIDの頭から数文字分を投稿に表示するようにしました。

連投防止機能

次の投稿までに1分の間隔が必要なようにしました。

テキストタグを使用不可に

当アプリはUnityを使用しているのですが、文字表示の設定でRichTextを許可するかどうかというものがあります。
これをオフにしておかないとサイズや色がタグで簡単に変更できてしまうので、オフにしました。


こんなふうに文字サイズを勝手に変えられてしまう。

管理者機能の追加

自分の端末でのみ、削除ボタンとNGユーザーボタンが表示されるようにして、「これはあかんな」と思ったコンテンツはポチっと削除したりユーザーの投稿がサーバーから一括で消えるようにしました。

その後

上記の対応をすべて入れたら無事にAppStoreの審査が通りました。
荒らしの人も諦めたのか飽きたのかいなくなりました。

荒らし行為や誹謗中傷は同意した規約に反している行為だし、内容や頻度によってはサービス運営に大きく影響するので、ものによっては法的手段に訴えるのもありかなと思っています。
去年だと「人狼ジャッジメント」の例なんかがありましたね。

ちなみに初期リリース(1.0.0)のタイミングでリジェクトされたときは、1/1に間に合わせたかったので絵馬機能をオフにして提出してリリースしました。
その後しれっと絵馬機能をオンにして1.0.1や1.0.2のバージョンを提出したら普通に通っていました。1.0.3のアップデートでまたリジェクトされたため、上記の対応をちゃんと入れました。
なのでまあ、AppStoreのその時のレビュー担当によるという感じでしょうか。

この初詣オンラインは初詣シーズン限定のアプリにしようかということで、しばらくしたらストアからの公開を停止し、来年頭に初詣オンライン2022としてアップデートして再公開しようかと思っています。

今後ユーザー投稿型のアプリを作る際に忘れないようにということで覚書としてまとめました。
ご覧いただきありがとうございました。

Discussion