今日は、勉強をしてみました。
今度作りたいと思ってるアプリのために、必要な機能のテスト。
サーバーサイドが経験不足なため、なかなか手を出してなかったPushNotificationです。
何のことかわかりにくいと思いますが、あれです。Twitterとかにメッセージが届いたら、iPhoneに通知が届くあれです。その機能の実装です。
詳しいことは、資料のリンク先を書いておきますので、そちらを参照してもらうカタチで書きます。いずれ、作ったアプリ(システム)は、オープンソースで公開するつもりなので、そのときは詳細に解説します。
僕が読んだ資料は以下の通り。
これは、日本語で書いてあるので結構いいです。ざっと目を通すことで、どういうことが行われてるのか理解できます。
次は、個人のブログ。
こちらも割と丁寧にかいてあり、たすかりました。
PHPのコードサンプルはこちらから。
OSXでPHPを動かすための設定はこちらを参考に。
やったことを列記します。
・アプリに組み込む証明書を発行する作業(AppleのDevサイトで設定とか)
・PushNotificationを受ける機能をつけたサンプルアプリを実装
・MacBookAirでPHPを動かせるようにする作業
・PHPでiPhoneへ通知を発信するサンプルプログラムの実装(コピペして修正)
で、今のところサーバー側は、超未完成通知発信だけバージョンなので、手動でTokenを設定します。
1. 作ったiOSアプリを実機で走らせる。
2. NSLogで表示したデバイスのトークンをコピー
3. PHPのプログラム中にペースト
4. 証明書から書き出したpemファイルをPHPと同じ階層に入れる
そうすると、こうなりました。
これ、テスト用とはいえグラフィックをざっくり作りました。
testを変えて、本番でも使うつもり。
ネットで見つけた絵をざっくりトレースしただけ。。
超ダサイですが、ブラウザでphpをたたきます。
すると、
じゃーん。でました。
アプリが落ちてるときでも、
見事に通知表示。ちゃんとiOS5の通知で出ました。
そして、
バッジも。
今日のスタディーはここまで。
この機能を使って、「自分が作ったアプリが売れたらベルが鳴るシステム」を作ります。
参考にしたのは、この映画。
「ミドルメン」アダルト業界でネットを変えた男たち
初めまして。
返信削除現在、PushNotificationの実装でつまづいておりまして、
色々検索していたら、このページに辿り着きました。
もしよろしければ、テストで作られたPushNotificationのプロジェクトを、
githubなどへ公開して頂けると、ものすごく嬉しいです。。
急なコメントで申し訳ございませんが、よろしくお願い致します!!
このコメントは投稿者によって削除されました。
削除探してみましたが、このときのプロジェクトファイルは残ってませんでした。
削除何が分からないか教えてもらえたらと思います。
http://iphone.longearth.net/2009/09/01/%E3%80%90iphone%E3%80%91push-notification%E3%81%AE%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95/
返信削除上記のサイトを参考に、
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//デバイストークン認証通知 認証されるとapplication: didRegisterForRemoteNotificationsWithDeviceToken:が呼ばれる
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
}
- (void)application:(UIApplication*)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)devToken{
NSLog(@"deviceToken: %@", devToken);
//self.devToken; <=ここでエラーがでるのでコメントアウトしてみました。。
[self sendProviderDeviceToken:devToken];
}
- (void)application:(UIApplication*)app
didFailToRegisterForRemoteNotificationsWithError:(NSError*)err{
NSLog(@"Errorinregistration.Error:%@",err);
}
- (void)sendProviderDeviceToken:(NSData *)token {
NSMutableData *data = [NSMutableData data];
[data appendData:[@"device=" dataUsingEncoding:NSUTF8StringEncoding]];
[data appendData:token];
NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"ホスト名"]];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:data];
[NSURLConnection connectionWithRequest:request delegate:self];
}
上記のホスト名にデバイストークン保存用のサーバーのURLを書きます。
以上の書き方でdevicetokenをNSLogに書き出せないのは、やはりappleへの登録がうまくいっていないということでしょうか??
NSLog(@"deviceToken: %@", devToken); ではなにが表示されるのですか?
返信削除