当我从Parse收到推送通知时如何播放声音?

时间:2015-08-28 05:55:43

标签: ios objective-c parse-platform push-notification

我找不到有用的东西或者我可能没有正确理解,所以让我们从头开始。

App A正在向App B发送通知,如下所示:

NSDictionary *data = @{
                           @"alert" : @"Purchase Successful! 1 Remove Ads",
                           @"badge" : @"Increment",
                           @"sounds" : @"Bell.caf",
                           };
    PFPush *push = [[PFPush alloc] init];
    [push setChannels:@[ @"Mets" ]];
    [push setData:data];
    [push sendPushInBackground];

App B接收推送通知,如下所示:

//
//  ParseStarterProjectAppDelegate.m
//
//  Copyright 2011-present Parse Inc. All rights reserved.
//

#import <Parse/Parse.h>

// If you want to use any of the UI components, uncomment this line
// #import <ParseUI/ParseUI.h>

// If you are using Facebook, uncomment this line
// #import <ParseFacebookUtils/PFFacebookUtils.h>

// If you want to use Crash Reporting - uncomment this line
// #import <ParseCrashReporting/ParseCrashReporting.h>

#import "ParseStarterProjectAppDelegate.h"
#import "ParseStarterProjectViewController.h"

@implementation ParseStarterProjectAppDelegate

#pragma mark -
#pragma mark UIApplicationDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Enable storing and querying data from Local Datastore. Remove this line if you don't want to
// use Local Datastore features or want to use cachePolicy.
[Parse enableLocalDatastore];

// ****************************************************************************
// Uncomment this line if you want to enable Crash Reporting
// [ParseCrashReporting enable];
//
// Uncomment and fill in with your Parse credentials:
 [Parse setApplicationId:@"APPIDHERE" clientKey:@"CLIENTKEYHERE"];
//
// If you are using Facebook, uncomment and add your FacebookAppID to your bundle's plist as
// described here: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/
// [PFFacebookUtils initializeFacebook];
// ****************************************************************************

[PFUser enableAutomaticUser];

PFACL *defaultACL = [PFACL ACL];

// If you would like all objects to be private by default, remove this line.
[defaultACL setPublicReadAccess:YES];

[PFACL setDefaultACL:defaultACL withAccessForCurrentUser:YES];

// Override point for customization after application launch.

self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

if (application.applicationState != UIApplicationStateBackground) {
    // Track an app open here if we launch with a push, unless
    // "content_available" was used to trigger a background push (introduced in iOS 7).
    // In that case, we skip tracking here to avoid double counting the app-open.
    BOOL preBackgroundPush = ![application respondsToSelector:@selector(backgroundRefreshStatus)];
    BOOL oldPushHandlerOnly = ![self respondsToSelector:@selector(application:didReceiveRemoteNotification:fetchCompletionHandler:)];
    BOOL noPushPayload = ![launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (preBackgroundPush || oldPushHandlerOnly || noPushPayload) {
        [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
    }
}

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                    UIUserNotificationTypeBadge |
                                                    UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                             categories:nil];
    [application registerUserNotificationSettings:settings];
    [application registerForRemoteNotifications];
} else
#endif
{
    [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                     UIRemoteNotificationTypeAlert |
                                                     UIRemoteNotificationTypeSound)];
}

return YES;
}

#pragma mark Push Notifications

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
PFInstallation *currentInstallation = [PFInstallation currentInstallation];
[currentInstallation setDeviceTokenFromData:deviceToken];
[currentInstallation saveInBackground];

[PFPush subscribeToChannelInBackground:@"Mets" block:^(BOOL succeeded, NSError *error) {
    if (succeeded) {
        NSLog(@"ParseStarterProject successfully subscribed to push notifications on the broadcast channel.");
    } else {
        NSLog(@"ParseStarterProject failed to subscribe to push notifications on the broadcast channel.");
    }
}];
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
if (error.code == 3010) {
    NSLog(@"Push notifications are not supported in the iOS Simulator.");
} else {
    // show some alert or otherwise handle the failure to register.
    NSLog(@"application:didFailToRegisterForRemoteNotificationsWithError: %@", error);
}
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[PFPush handlePush:userInfo];

if (application.applicationState == UIApplicationStateInactive) {
    [PFAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];
}
}

///////////////////////////////////////////////////////////
// Uncomment this method if you want to use Push Notifications with Background App Refresh
///////////////////////////////////////////////////////////
//- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
//    if (application.applicationState == UIApplicationStateInactive) {
//        [PFAnalytics trackAppOpenedWithRemoteNotificationPayload:userInfo];
//    }
//}

#pragma mark Facebook SDK Integration

///////////////////////////////////////////////////////////
// Uncomment this method if you are using Facebook
///////////////////////////////////////////////////////////
//- (BOOL)application:(UIApplication *)application
//            openURL:(NSURL *)url
//  sourceApplication:(NSString *)sourceApplication
//         annotation:(id)annotation {
//    return [PFFacebookUtils handleOpenURL:url];
//}

@end

现在,当App B收到推送通知时,为什么我听不到任何声音响起?关闭应用程序并显示横幅通知(我想要声音)时没有声音,应用程序打开时没有声音并且通知出现(只是振动,这很奇怪)。

非常感谢任何帮助。

谢谢

3 个答案:

答案 0 :(得分:1)

我之前没有做过,但是在解析中搜索我得到了一些解决方案,试试这可能对你有帮助

更改此行

  NSDictionary *data = @{
                       @"alert" : @"Purchase Successful! 1 Remove Ads",
                       @"badge" : @"Increment",
                       @"sounds" : @"Bell.caf",
                       };

   NSDictionary *data = @{
                       @"alert" : @"Purchase Successful! 1 Remove Ads",
                       @"badge" : @"Increment",
                       @"sound" : @"Bell.caf",  --> the key Name is not sounds 
                       };

参考link

答案 1 :(得分:1)

NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:
    @"This is an alert with a custom horn sound!", @"alert",
    @"Increment", @"badge",
    @"homerun.caf", @"sound",
    @"5", @"score_REDSOX",
    @"0", @"score_YANKEES",
    @"4th", @"inning",
    nil];

PFPush *push = [[PFPush alloc] init];
[push setChannels:[NSArray arrayWithObjects:@"REDSOX", @"YANKEES", nil]];
[push setPushToAndroid:false];
[push expireAfterTimeInterval:86400];
[push setData:data];
[push sendPushInBackground];



Push Notifications Web Console
{
  "alert": "This is an alert with a custom horn sound!",
  "badge": "Increment",
  "sound": "homerun.caf",
  "score_REDSOX": "5",
  "score_YANKEES": "0",
  "inning": "4th"
}

答案 2 :(得分:1)

我通过PHP代码实现了这一目的,以发送Apple推送通知。

$body['aps'] = array(
'alert' => 'Hi hello message......',
'sound' => 'Bell.caf',
'badge' => '1',
);

可能会对你有帮助。