読者です 読者をやめる 読者になる 読者になる

pixyzehn blog

iPhone App, Mac App, Programming, Web service, Tool, Evernote, etc

iOSでpush通知を受け取った後の起動とホーム画面のアイコンをタップした後の起動について

Xcode

http://www.flickr.com/photos/44093100@N00/1186846236
photo by bwana


調べることがあったので覚え書きとして。


iOSでpush通知を受け取った際には以下の場合が想定されます。


・アプリが起動していない時に、push通知が届きpush通知から起動
・アプリが起動している時に、push通知が届きpush通知から起動
・アプリがバックグラウンドで起動している時に、push通知が届きpush通知から起動


それぞれについて呼ばれるメソッドを以下に示します。


・アプリが起動していない時に、push通知が届きpush通知から起動

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

  NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
  if (userInfo != nil) {
      //処理
  }

}


launchOptionsは本来nilなのですが、pushから開くとここに以下のようなJSON形式のデータが届きます。Apple公式ドキュメントから引用。

{
  "aps" : { 
  "alert" : "You got your emails.",
  "badge" : 9,
  "sound" : "bingbong.aiff"
},
  "acme1" : "bar",
  "acme2" : 42
}


・アプリが起動している時に、push通知が届きpush通知から起動
・アプリがバックグラウンドで起動している時に、push通知が届きpush通知から起動
はdidReceiveRemoteNotificationというメソッドが呼ばれます。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{  

  if (application.applicationState == UIApplicationStateActive)
  {
    // アプリが起動している時に、push通知が届きpush通知から起動
  }    

 if (application.applicationState == UIApplicationStateInactive)
  {
    // アプリがバックグラウンドで起動している時に、push通知が届きpush通知から起動
  }    

}


となります。userInfoには先ほどのJSON形式のデータがはいります。


push通知はpush通知から開くとpush通知から送られてきたデータを受け取ることができるが、もし仮にpush通知がきたが、それをホーム画面のアイコンをクリックして起動したらpush通知のデータは受け取れないのかということを調べました。


push通知から送られてくるデータにはバッジの数やその他任意のデータを付与できるので、そこの情報からTabbarControllerのタブにバッジをつけることをしたいということがありました。


そこでなんとかしてpush通知から送られてくるデータを取得しようと試みたものの、なかなかそのような実装方法が見つからず。。


stackoverflowを探すと、どうやらpushではなくアイコンタップから開いた場合pushのデータを取得するのは難しいようです。


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


TabbarControllerのタブのバッジなどはサーバーから取得したほうがいいとのことです。


このことからpushで送るデータはなんでもいいというわけではなくて、pushから起動したときに必要な情報というものに制限したほうがいいようです。


なにか間違えやこうしたほうがいいなどあればご指摘ください!


参考サイト


https://developer.apple.com/jp/devcenter/ios/library/documentation/RemoteNotificationsPG.pdf


http://d.hatena.ne.jp/shu223/20140113/1389612563


http://gokexn.blog.fc2.com/blog-entry-5.html