iOSからAsk Monaに投稿できるようにする

その他 テスト

77 Res. 0.01830824 MONA 9 Fav.

iOS向けのAsk Monaアプリの開発をしています。自分が使うように開発しているので進捗はものすごく遅いです。もしよければお気に入り登録お願いします。

ある程度完成したのでTestFlightでベータテスターを募集しています。ベータテストへの参加方法としては >>63 をごらんください。

http://askmona.org/10247#res_63

1 :さくさん三級:2018/03/21 00:18:58  0.01504202MONA/10人

iOSアプリからAsk Monaにログインして投稿できるかテストします

2 :さくさん三級:2018/03/21 00:20:25  0MONA/0人

アプリからのテスト投稿 1521559224.99242

3 :さくさん三級:2018/03/21 00:22:23  0MONA/0人

アプリからのテスト投稿 1521559343.05332

4 :さくさん三級:2018/03/21 00:24:07  0MONA/0人

できた。 http://askmona.org/developers#auth_key にPHPのサンプルコードがありますが、Swiftで認証キーを作るのが少しやっかいでした。

5 :さくさん三級:2018/03/21 00:27:05  0MONA/0人

http://askmona.org/developers/mypage にアクセスして、アプリIDと開発者シークレットキーを取得する必要します。

これらを使ってログインさせると以下のようなJSONが返ってきます。

```
{
"status" : 1,
"secretkey" : "Uhogehoge=",
"u_id" : 12236
}
```

6 :さくさん三級:2018/03/21 00:30:04  0MONA/0人

指示通りに開発者シークレットキー、nonce、time、secretkeyの順番に並べて、SHA-256してBase64エンコードします。これで認証キーの出来上がりです。

```
let nonce = UUID().uuidString
let time = Int(Date().timeIntervalSince1970)
let secretkey = "Uhogehoge=" //さっき取得したやつ

let str = "\(applicationSecretKey)\(nonce)\(time)\(secretkey)"
let auth_key = str.sha256().base64EncodedString()
```

7 :さくさん三級:2018/03/21 00:37:55  0MONA/0人

僕がつまづいたのはこのふたつでした。

・SwiftでSHA-256でハッシュを計算する方法
・timeのnonceが生成された時刻(UNIX時刻)の解釈

前者は https://stackoverflow.com/questions/46780451/creating-sha256-hash-with-swift4 を読んで解決しました。
後者は Date().timeIntervalSince1970 で取得するとミリ秒単位(小数点以下)を含む値を取得します。ミリ秒を含めて送信していたため「正しいはずなのに認証キーが不正扱いされる」という現象に陥っていました。

8 :さくさん三級:2018/03/21 00:39:56  0MONA/0人

今日はひとまずAsk Monaにレスを投稿するという目標が達成できました。

9 :さくさん三級:2018/03/21 14:43:02  0MONA/0人

それっぽい感じの起動画面ができました。



この画像を貼るためにimgurを利用しました。そういえばAsk Monaでは画像をアップロードするためには適当なサーバーではダメで、imgurのURLが含まれているかどうかで展開されるかどうかが決まるとどこかで見ました。

Swiftでimgurに投稿するアップロードするライブラリがあればよいけれど、なければ自前でライブラリ書くことになりそうです。

10 :さくさん三級:2018/03/21 23:04:16  0MONA/0人

アプリからのテスト投稿 1521641056.514

11 :さくさん三級:2018/03/21 23:05:18  0MONA/0人

アプリからのテスト投稿 1521641118.35906

12 :さくさん三級:2018/03/22 01:05:24  0MONA/0人

カテゴリーとトピック一覧を実装。GETで取得できるし特に認証キー等は必要ないので、この辺りは表示させるだけです。




13 :さくさん三級:2018/03/22 18:33:58  0MONA/0人

アプリからのテスト投稿(age) 1521711238.19756

14 :さくさん三級:2018/03/22 18:34:05  0MONA/0人

アプリからのテスト投稿 1521711238.19555

15 :さくさん三級:2018/03/22 18:35:05  0MONA/0人

アプリからのテスト投稿 1521711305.32509

16 :さくさん三級:2018/03/22 18:35:05  0MONA/0人

アプリからのテスト投稿(age) 1521711305.32661

17 :さくさん三級:2018/03/23 23:20:02  0MONA/0人

全体の投稿からキーワード検索するのはAPIで提供されていないんですね。Google Search APIかBing APIを使って実装することになるのかな。

18 :さくさん三級:2018/03/23 23:35:20  0MONA/0人

この手のアプリを作っているとBB2Cが洗練されているのがわかりますね。



一番下までスクロールするのが大変です。既読管理もないと厳しそう。

19 :さくさん三級:2018/03/24 17:09:19  0MONA/0人

>17

てすと

>>16

てすと

>>15

てすと

>14

てすと

20 :さくさん三級:2018/03/24 17:09:36  0MONA/0人

>> 15

てすと

21 :さくさん三級:2018/03/24 17:56:17  0MONA/0人

投稿画面から投稿 1521881777.48426

22 :さくさん三級:2018/03/24 18:08:29  0MONA/0人

投稿画面から投稿 sage:true 1521882509.843

23 :さくさん三級:2018/03/24 18:08:37  0MONA/0人

投稿画面から投稿 sage:false 1521882517.27194

24 :やしやし@もやし六段教士:2018/03/24 18:09:48  0MONA/0人

おー

25 :さくさん三級:2018/03/24 18:15:09  0.00114MONA/1人

UIについては全体的に宿題ですが、投稿画面への導線と、投稿画面を実装しました。





便利機能についてはあとで洗い出すとして、
* トピック画面でユーザーの名前をタップすると「この投稿にレスを返すか?」というアクションシートの表示させる
* トピック画面でユーザーのIDをタップするとそのユーザーの詳細画面へ遷移させる
* ユーザーの詳細画面で「このユーザーをブロックするか?」を表示させる。ブロック機能はアプリオリジナル機能で該当ユーザーの投稿を非表示にする

26 :monakun一級:2018/03/24 19:56:01  0MONA/0人

いいね

27 :さくさん三級:2018/03/24 21:10:34  0MONA/0人

>>24 >>26

コメントありがとうございます!

28 :S A I 四段錬士:2018/03/24 23:11:01  0MONA/0人

おお!これは凄く便利そうなアプリができそうですねー

29 :さくさん三級:2018/03/25 23:44:19  0MONA/0人

投稿画面から投稿 sage:true 1521989050.47978

30 :さくさん三級:2018/03/25 23:48:48  0MONA/0人

>>28
> おお!これは凄く便利そうなアプリができそうですねー
>

ありがとうございます!無事リリースできると良いのですが・・・
#iPhoneから投稿

31 :さくさん三級:2018/03/25 23:52:38  0MONA/0人

>>29-30
今日の実装した部分です。

32 :さくさん三級:2018/03/25 23:55:18  0MONA/0人

トピックから該当のレスを選んで「コメントする(番号だけ指定する)」「引用してコメントする(本文を引用する)」をできるようにしました。



引用してコメントする場合には、投稿画面は下記のようになります。



投稿画面からimgurに直接アップロードできれば使い勝手が良さそうですね。imgurにログインしないで使う場合(匿名アップロード)、ログインしてから使う場合(あとから削除が可能)の使い分けが可能にしたいですね。

33 :さくさん三級:2018/03/26 06:45:38  0.00004649MONA/1人

てすと
#iPhoneから投稿

34 :さくさん三級:2018/03/26 06:51:23  0.00004649MONA/1人

投稿処理が完了したら投稿画面を閉じるようにしましたが、トピック画面に戻った時に最新内容にリロードさせたほうが良さそうですね
#iPhoneから投稿

35 :さくさん三級:2018/03/26 18:34:21  0.00004649MONA/1人

それっぽく使えるようになった段階で、ベータテスターを募った方がいいかもしれないですね…… 意見・要望を投げられるようにしておきます


#iPhoneから投稿

36 :さくさん三級:2018/03/26 23:24:18  0.00004649MONA/1人

てすと

#iPhoneから投稿

37 :さくさん三級:2018/03/26 23:35:56  0.00004649MONA/1人

Test

#iPhoneから投稿

38 :さくさん三級:2018/03/26 23:39:27  0.00004649MONA/1人

てすと

#iPhoneから投稿

39 :さくさん三級:2018/03/27 01:34:10  0.00004649MONA/1人

それっぽい感じで体裁を整えました。テキストを投稿するだけであれば使えるとようになったと思います。





画像を展開できるようにしたいですね。

40 :さくさん三級:2018/03/27 11:46:48  0.00004649MONA/1人

この画像の左上で自分のアイコン(自分のユーザーIDからアイコン画像を生成するGitHubとかで使われているIdenticonです)を表示しており、そこをタップするとマイページを表示させようとしています。



アイコンの周りの輪っかは、 https://monappy.jp/memo_logs/view/syuribox/447 を参考にして、(無級)→三級→二級→一級→初段→二段→(省略)→十段→名人 でそれぞれ異なる色を与えて、その人のAsk Monaでのやり込みを表現できるようにしたいなと考えています。

級段位ごとの色は、空手or柔道の帯の色を参考にしたいですが、初段以上になると黒帯になってしまうので、もう少し色に幅を持たせたいところです。

41 :さくさん三級:2018/03/27 11:54:32  0.00004649MONA/1人

マイページは、以前作っていたMonappyビューアから流用して移植したいと思います。



AskMonaでは連携ソーシャルアカウントについての情報は取得できないので、アイコン+名前+自己紹介文の表示となる予定です。

42 :さくさん三級:2018/03/29 23:47:54  0.00004649MONA/1人

食あたりで1日以上動けなくなっていましたが復活したのでAskMonaクライアントの実装を進めました。マイページ(ユーザーページ)はこのような形にしました。



画面の下側に何を表示するか悩むところですが、アプリ内DBに保存しているそのユーザーが投稿したトピックの一覧でも表示させようと考えています。

43 :さくさん三級:2018/03/30 00:40:26  0.00004649MONA/1人

未読管理を実装したいですね。方法としてはいくつか考えることができます。

* 過去分の投稿を全部アプリ内にキャッシュとして残しておいて新規取得分を未読として扱う
* 過去分のレス数だけを保存しておいて前回レス番号以降を未読として扱う

ユーザーページで、その人がどんな書き込みをしているのかを見るのであれば前者が良さそうです

44 :さくさん三級:2018/03/30 15:27:49  0.00004649MONA/1人

新着確認テスト

45 :さくさん三級:2018/03/30 19:16:42  0.00004649MONA/1人

雑な実装だけど未読管理できるようになった。トピックリスト上でも未読数を扱いたいので、もう少しうまく組み込まないと後で詰みそう。

46 :さくさん三級:2018/03/31 22:14:58  0.00004649MONA/1人

級段位に関しては、クリーム色(無級)、黄、オレンジ、赤、青、緑、紫、茶、黒(八段以上)を想定しています。具体的な色に関してはマテリアルデザインの色から収まりの良いものを選びたいと考えています。

自分の段位を tintColor として設定して、アプリの随所でアクセントカラーとして使用できれば良さそうですね。

47 :さくさん三級:2018/04/01 01:53:15  0.00004649MONA/1人

ユーザー詳細画面のヘッダー部分のデザインを調整しました。このトピに投稿してくださった方の表示だと下図のようになります。







48 :さくさん三級:2018/04/02 16:18:42  0.00007174MONA/2人

いままで受け取ったMONAは「経験値」として表示させることにしました。単位は「wata」です。



過去にMonappyビューアを作っていたのですが、MONACOINの文字が入っていたためにAppleでの審査にリジェクトされることがありました。モナコインの文言をアプリから消した状態で再審査に出したのですが、1ヶ月以上審査してもらえない状態が続いています。お察し下さい……

49 :さくさん三級:2018/04/07 17:06:37  0.00004649MONA/1人

test

50 :さくさん三級:2018/04/07 17:07:48  0.00004649MONA/1人

てすと

51 :さくさん三級:2018/04/07 17:20:08  0.00004649MONA/1人

てすと2

52 :さくさん三級:2018/04/07 17:28:29  0.00004649MONA/1人

既読管理が思ったよりも複雑になってきてソースコードがこんがらがってきて、1週間実装が止まっていました。コードを読み解くのが面倒になってモチベーションが落ちてしまって、これはいかんということで実装方針を変更してみました。

53 :さくさん三級:2018/04/07 18:04:28  0MONA/0人

てすと

54 :さくさん三級:2018/04/07 18:11:17  0MONA/0人

トピック一覧画面での未読表示も実装しました。自分が見たことのあるトピックが明示的に見やすくなったと思います。




匿名で0.00004649MONA投げてくださった方モナゲありがとうございます!大量だったので驚いてしまいました。

55 :さくさん三級:2018/04/07 21:10:20  0MONA/0人

test

56 :さくさん三級:2018/04/07 21:18:55  0MONA/0人

test

57 :さくさん三級:2018/04/07 21:22:16  0MONA/0人

test

58 :さくさん三級:2018/04/07 23:58:06  0MONA/0人

ユーザーページを開くと、こんな感じでその人の投稿(アプリ内キャッシュデータ)を表示させようと考えていますが、この部分のUIをどうしようか悩んでいます。



単に投稿一覧をズラーっと並べるのもありっちゃありなのですが、一覧性に欠くので、一トピにつきその人の最新の投稿を一アイテムで表示させた方が良い気がしてきました。実装してみます。

59 :さくさん三級:2018/04/08 01:20:35  0MONA/0人

できました。大分一覧性が上がったと思います。そのトピでの最終投稿日時も表示できればなおヨシでしょうか。



概ねアプリの機能が盛り込めたので、ログイン画面で 1password 連携を実装し終わったらベータテストを開始できれば良いなぁと考えています。

60 :さくさん三級:2018/04/08 16:13:49  0MONA/0人

てすと

61 :さくさん三級:2018/04/08 19:15:18  0MONA/0人

Ask Monaのログインってモナコインアドレスを直接入力する形になっているので、アプリのログイン画面での入力が地獄のように大変ですね。みんなどうやって対応しているんだろう……

1password連携に対応しました!今日の晩にでもGoogleフォームを使って、ベータテスターの募集をかけますね。

62 :さくさん三級:2018/04/09 00:39:54  0MONA/0人

ベータテスターのエントリーフォームを作成しました!

https://goo.gl/forms/Y4k6vIv6jDU8BnsN2

前に作っていたMonappyビューアがリジェクトされ続けて、最後の審査は1ヶ月wait状態になってからリジェクトされるという悲劇にぶち当たってしまったので、Ask Monaクライアントにはまだ機能追加をしたいと考えているため、一般公開は少し先になりそうです。

「試してあげようかな?」という気軽な感じで参加していただけると幸いです。

63 :さくさん三級:2018/04/09 00:40:08  0MONA/0人

ベータテストへの参加方法としては以下の通りです

* エントリーフォーム( https://goo.gl/forms/Y4k6vIv6jDU8BnsN2 )でApple ID(メールアドレス)を登録する
* TestFlight( https://itunes.apple.com/jp/app/testflight/id899247664?mt=8 )をインストールする
* Appleからベータテスターへのお誘いメールがきます
* TestFlightからAsk Mona for iOSをインストールします

まだまだ足りない機能が多いと思いますが、お気付きの点がありましたらアプリ内の設定画面の「お問い合わせ」と「不具合の報告」からご連絡いただけると嬉しいです!

64 :さくさん三級:2018/04/10 00:42:57  0MONA/0人

今週忙しそうなので進捗出せそうにないです。時間を見つけて機能追加していこうと考えています。

65 :駆け出し落書き名無し二段錬士:2018/04/11 14:05:17  0MONA/0人

iPhoneないので試せないですが、自分で作っちゃうなんてすごいですね~。頑張ってください!

66 :さくさん三級:2018/04/11 22:08:01  0MONA/0人

>>65
ありがとうございます!一般公開までまだ時間かかると思いますがボチボチやっていきたいと思います

67 :さくさん三級:2018/04/11 23:11:42  0MONA/0人

レス内リンクをタップできるようにしました。



リンク関係のデザインを修正しないといけないですね

68 :さくさん三級:2018/04/12 19:38:01  0MONA/0人

リンクはブラウザでよくある感じで表現することにしました。イタリックで青色です。

69 :さくさん三級:2018/04/13 00:09:11  0MONA/0人

ツールバーのボタンをアイコンに変更しました。文字がなくても何をするアイコンかわかりますでしょうか。



70 :さくさん三級:2018/04/14 12:48:29  0MONA/0人

閲覧履歴画面・画像投稿機能がまだ実装できていませんが、この状態で一旦アプリをリリースしてみたいと思います。Ask Monaが2chに類するもの扱いでアプリが通らないか心配になってきました……

71 :さくさん三級:2018/04/15 01:49:06  0MONA/0人

今日はアプリ申請のために体裁を整える作業をしていました。

Appleにアプリを提出する際にはスクリーンショットをiPhone X、iPhone 8Plus、iPadの解像度で撮影する必要があります。かなり面倒くさい作業なので、スクショを自動で撮影するfastlane snapshotを導入しました。

fastlaneはiOSアプリ開発の便利ツール集的なもので、その一機能fastlane snapshotはスクリーンショットを自動で撮影してくれるツールです。

明日の午前中にはアプリの申請をしたいですね。Appleからの感触が悪ければ、このアプリの開発は終了としたいと思います。

72 :さくさん三級:2018/04/15 17:24:03  0.00117117MONA/1人

アプリを申請に出しました。早くて明日、遅くて水曜日くらいには審査結果が返ってくると思います。

73 :さくさん三級:2018/04/15 18:48:31  0MONA/0人

招待が遅くなってしまい申し訳ございません。4/11、4/14にベータテストに申し込んでくださった方に、さきほどベータテストへの招待メールを送らせていただきました。

Appleに提出しているバイナリと同一のバージョン(v1.0.0.21)が、一番新しいバージョンです。よろしくお願いいたします。

74 :モナコインちゃん好き初段:2018/04/15 23:19:44  0MONA/0人

アプリ楽しみです(╹◡╹)

75 :さくさん三級:2018/04/17 13:48:56  0MONA/0人

リジェクトされてしまいました。理由としては以下の通りです。

1. 2 Safety: User Generated Content
2. 1 Performance: App Completeness
2. 3 Performance: Accurate Metadata
4. 3 Design: Spam

本文が結構長いので要約していくと、以下の通りになりました。

1. ユーザーが生成したコンテンツを表示させる場合には予防措置を設けておく必要があります
 1.1. ユーザーが利用規約に同意することを要求する
 1.2. 好ましくないコンテンツをフィルタリングする
 1.3. 不快なコンテンツにフラグを立てる仕組み
 1.4. 不正なユーザーをブロックする仕組み

76 :さくさん三級:2018/04/17 13:49:02  0MONA/0人

2. 新規登録ボタンが反応しません
* 既存のユーザーのみに利用してもらいたいのでログインボタンしか有効にしていなかったため怒られました
3. アプリのスクショが少ない(1枚だけではリジェクトの対象となるようでした)
* マイページ画面のスクリーンショットだけだと不足なようです
4. アプリアコンが他のアプリと同じである
* 自分の他のアプリのを流用したんだけど怒られてしまいました

77 :さくさん三級:2018/04/17 14:12:45  0MONA/0人

今後の対策としては、以下のようなことを考えています。

・ログイン時に利用規約を表示させるようにします
・不快な投稿にフラグを立てる仕組みを追加します
 ・レス単位で削除(あぼ〜ん)できるようにします
・不快なユーザーをブロックする仕組みを導入します
 ・アプリ側で共有のNGリストを設ける
 ・アプリユーザーが自分の意思で別のユーザーをNGリストに追加する
・新規登録画面を追加します
 ・Ask Monaの新規登録にはアドレスが必要なのでAppleの人に用意できるかどうかが心配だが……
・アプリのスクショを増やします
 ・3枚くらい登録してたら良いのだろうか……1枚だとダメなら最低n枚以上と制限して欲しかった……
・アプリアイコンを変更します

やることが多いのでまたしばらくはアプリの申請ができないと思います。ベータテスターは随時募集していますので >>63 を参考にご応募ください!

お気に入り

新規登録してMONAをもらおう

登録すると、投稿したり、MONAをもらったりすることができます。質問したり、答えたりしてMONAを手に入れてください。

新規登録ログイン