Help us understand the problem. What is going on with this article?

シミュレーターでのiOSのプッシュの動作確認にSimulatorRemoteNotificationsが便利!

More than 3 years have passed since last update.

iOSシミュレーターでのプッシュ開発

さて本題ですが、iOS開発において、プッシュの動作確認って面倒なんです。
証明書つくって、デバイストークンをログに出して、Pythonかなんかでスクリプト組んで、実機で確認!みたいな。

なので、適当にやってしまいがち(違)ですが、ちゃんとやろうと思って、いろいろ調べていたら、
いいものを見つけました。

https://github.com/acoomans/SimulatorRemoteNotifications

名前のまんまですね!使い方は簡単で、AppDelegate.m

#import <SimulatorRemoteNotifications/UIApplication+SimulatorRemoteNotifications.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#if DEBUG
    [application listenForRemoteNotifications];
#endif
    return YES;
}

として、あとはターミナルを開いて、

echo -n '{"aps":{"alert":"message", "badge":2, "content-available":1 }, "message":"message"}' | nc -4u -w1 localhost 9930

と打てばオッケー!

このOSSがアプリ内で、localhostの9930ポートにローカルサーバーを立ててくれて、プッシュのシミュレートをしてくれます。

これで、- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandlerが呼ばれるので、あとはよしなに。

アプリ起動中でも、バックグラウンドでも上記メソッドを呼んでくれるのですが、OSが管理しているところのNotification Centerにプッシュ通知を出してくれたり、アプリアイコンにバッジを付けてくれたりまではしないので、そのあたりのタストはどうしても実機になります。

ただ、これでだいぶと作業が捗ると思います。

よくあるやつ

タブバーにバッジを付けたい!みたいなやつ。忘れがちなのは、アプリがバックグラウンドで、プッシュが来て、プッシュから起動せずに、アプリアイコンから起動してしまったケース。

バッジは本当は、起動時にサーバーからとるのが一番よい気がしますが、めんどくさいので、バックグラウンドでプッシュが受け取れた場合のみ表示することにしましょう。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{ 
    // save userInfo in NSUserDefaults
    completionHandler( UIBackgroundFetchResultNoData );
}

みたいに、バックグランドで来た時もNSUserDefaultsかなんかに保存してからcompletionHandlerを呼んでおけば大丈夫ですね。

3年前のstack overflowにも似たような質問があったので、つたない英語で回答(初回答!)

http://stackoverflow.com/questions/12084015/ios-push-notification-how-to-get-the-notification-data-when-you-click-on-the-a/33298866#33298866

ってな感じで、シミュレーターでのプッシュ動作確認のお話でした!

kasajei
京都大学卒。認知情報学を専攻し、脳科学と数学が専門。在学中に起業。エンジニア集団CAMPHOR-の立ち上げ。大企業にて新規事業開発を行う。 趣味は能力・健康に関する情報収集と実践。
http://blog.kasajei.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away