質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

2回答

3736閲覧

LocalNotificationで通知音を変更したい

yuuki3

総合スコア9

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2016/05/03 12:30

編集2016/05/04 12:07

###前提・実現したいこと
iOSでpush通知機能を作成しています。
amazon snsと連携したpush通知を実装しようとしているのですが、
push通知音が変更できません。
原因の切り分けのため、localNotificationを利用して通知音を鳴らそうとしても
上手く行きませんでした。
やり方を教えて下さい。
イメージ説明
設定は上記のように追加しています。

###該当のソースコード

ここにご自身が実行したソースコードを書いてください
  • (void) nextButtonSelected: (UIButton *)button {

    //Amazon SNS

    NSLog(@"Registering for push notifications...");

    [self.popUp dismiss:YES];
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes: (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];

    [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    [[UIApplication sharedApplication] registerForRemoteNotifications];

}

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
[PFPush handlePush:userInfo];
NSLog(@"didReceiveRemoteNotification Notification");
pushCount = pushCount + 1;
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [NSDate date];
localNotification.timeZone = [NSTimeZone localTimeZone];
localNotification.applicationIconBadgeNumber = pushCount;
localNotification.soundName = @"out.caf";
[application scheduleLocalNotification:localNotification];
[application setApplicationIconBadgeNumber:pushCount];

}

// Local Notificationの場合

  • (void)application:(UIApplication *)application
    handleActionWithIdentifier:(NSString *)identifier
    forLocalNotification:(UILocalNotification *)notification
    completionHandler:(void(^)())completionHandler {
    NSLog(@"Local Notification");
    [application setApplicationIconBadgeNumber:pushCount];

}

###試したこと
mp3でテスト
wavファイルでテスト

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

本当に通知音が悪いのか切り分けるのに以下のコードのみ記述して実行してみてください。
これで鳴らなければ音声ファイルの問題だと思います。

①プログラムを実行して通知を受ける旨のダイアログを許可します。
②許可したら直ぐバックグラウンドにしてください。10秒後にローカル通知がなります。

Obj

1 2// AppDelegate 3 4#import "AppDelegate.h" 5 6@implementation AppDelegate 7 8- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 9 10 if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { 11 [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; 12 } 13 return YES; 14} 15@end 16 17// ViewController 18 19#import "ViewController.h" 20 21@implementation ViewController 22 23- (void)viewDidLoad { 24 [super viewDidLoad]; 25 26 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 27 localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow: 10]; 28 localNotification.alertTitle = @"Alert Title"; 29 localNotification.alertBody = @"Alert Body"; 30 localNotification.timeZone = [NSTimeZone localTimeZone]; 31 localNotification.soundName = @"out.caf"; 32 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 33} 34 35@end 36

最近あまりこの辺り触ってないのでうろ覚えですが、そもそもRemotePushでカスタムした音を鳴らす場合はサーバーから決まったフォーマットのJSONに記述するしくみではないですか?

iOSのPUSH通知(APNs)の種類について、ざっくり。

投稿2016/05/04 14:01

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通知音ファイル(out.caf)をどのようにして作成しましたか?

https://blog.takezou.com/archives/1832
を参考にしてGarageBandとafconvertコマンドで作成するか、そのページで公開されているサンプルcafファイルをダウンロードして使ってみれば、通知音ファイルの問題か、別の問題か切り分けできると思います。

投稿2016/05/03 13:13

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuki3

2016/05/04 01:04

ありがとうございます。試してみます!
yuuki3

2016/05/04 07:19 編集

サンプルファイルを利用して試してみましたが、 音は鳴りませんでした。 パスの問題なのかなと今調べていますが、解決には至っていません。 他、どのようなことが考えられますでしょうか? -(void) application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler { [PFPush handlePush:userInfo]; NSLog(@"didReceiveRemoteNotification Notification"); pushCount = pushCount + 1; UILocalNotification *localNotification = [[UILocalNotification alloc] init]; localNotification.fireDate = [NSDate date]; localNotification.timeZone = [NSTimeZone localTimeZone]; localNotification.applicationIconBadgeNumber = pushCount; localNotification.soundName = @"out.caf"; [application scheduleLocalNotification:localNotification]; [application setApplicationIconBadgeNumber:pushCount]; } - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { NSLog(@"didReceiveLocalNotification Notification"); NSLog(@"%d",notification.applicationIconBadgeNumber); [application setApplicationIconBadgeNumber:pushCount]; }
TakeOne

2016/05/04 23:50 編集

提示されたコードをコピペ(PFPushはたぶんAmazonSNSのクラスだと思うのでその処理は削除)して、回答で紹介した通知音ファイルをダウンロードして、私の環境で実行してみたら、変更された通知音がちゃんと鳴りました。 念のため確認したいのですが、アプリがフォアグラウンドにいる時に通知が来ても通知音は鳴らないことは認識していますか? アプリを起動したら、ホームボタンを押してアプリがバックグラウンドにいる状態でプッシュ通知テストしていますか? (フォアグラウンドで通知を受けた場合は、デフォルトの通知音が鳴るのではなく、通知音自体が鳴りません。また、通知メッセージも表示されません。) また、提示されたコードはリモートプッシュ通知でバックグラウンドフェッチを行い、バックグラウンドフェッチ中にローカル通知を行うコードだと認識しましたが、バックグラウンドフェッチ処理自体は正しくできるようになっていますか?(リモートプッシュ通知を受けて、バックグラウンド状態でdidReceiveRemoteNotificationが呼び出されるよう作られていますか?) ただ、そもそもは単純にリモートプッシュ通知で通知音を変更したかっただけなのに、リモートプッシュ通知とバックグラウンドフェッチとローカル通知を組み合わせてテストするという余計複雑で難しい状況に自分で自分を陥れているだけのようにも思えます。 通知音ファイルがちゃんと変更できるかどうかテストするなら、まずはKenterouさんがアドバイスされたような基本的なローカル通知のコードを実行して、ちゃんと変更した通知音が鳴るかどうかを確かめてみるところから始めることをお勧めします。
yuuki3

2016/05/05 07:47

ありがとうございます。 >単純にリモートプッシュ通知で通知音を変更したかっただけなのに、リモートプッシュ通知とバックグラウンドフェッチとローカル通知を組み合わせてテストするという余計複雑で難しい状況 こちらでした。 一つ一つ手順を追って確認し、そもそも サーバサイドの実装に問題があることを確認できました。 迷走しておかしな状態にした上での質問、ご迷惑をお掛けしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問