守望远方

热爱生活 热爱工作 守望远方
IOS 极光推送自定义通知遇到的一些坑

主要方法:

//自定义推送
- (void)networkDidReceiveMessage:(NSNotification *)notification {
    NSDictionary * userInfo = [notification userInfo];//
    NSString *contentUser = [userInfo valueForKey:@"content"];//content:获取推送的内容
    NSDictionary *extras = [userInfo valueForKey:@"extras"];//extras:获取用户自定义参数
    NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服务端传递的Extras附加字段,key是自己定义的     customizeField1:根据自定义key获取自定义的value
    NSLog(@"接收到自定义通知 content = %@,extras = %@,customizeField1 = %@",contentUser,extras,customizeField1);
    //极光自定义通知
    JPushNotificationContent *content = [[JPushNotificationContent alloc] init];
    //content.title = @"Test Notifications";
    //content.subtitle = @"2016";
    content.body = contentUser;
    content.badge = @1;
    content.categoryIdentifier = @"Custom DAKQQSB DingDan";
    content.sound = @"test.caf";
    // 5s后提醒 iOS 10 以上支持
    JPushNotificationTrigger *trigger1 = [[JPushNotificationTrigger alloc] init];
    if(IOS10_OrLater)
    {
        trigger1.timeInterval = 0.001;
    }
    else
    {
        //5s后提醒,iOS10以下支持
        trigger1.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    }
    
    JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
    request.requestIdentifier = content.categoryIdentifier;
    request.content = content;
    request.trigger = trigger1;
    request.completionHandler = ^(id result) {
        NSLog(@"极光推送结果返回:%@", result);
    };
    [JPUSHService addNotification:request];
    if([self runningInForeground])
    {
        NSLog(@"推送前台 推送前台");
    }
}

但是要注意的是,自定义通知时,只有程序在后台运行才有提示音,程序在前台运行时只有提示,没有声音,所以需要在前台自己设置播放声音.不知道还有没有其他解决办法

//判断前台
-(BOOL) runningInForeground
{
    UIApplicationState state = [UIApplication sharedApplication].applicationState;
    BOOL result = (state == UIApplicationStateActive);
    
    return result;
}
//播放音乐
-(void)playSound{
    SystemSoundID soundID;
    //NSBundle来返回音频文件路径
    NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"caf"];
    //建立SystemSoundID对象,但是这里要传地址(加&符号)。 第一个参数需要一个CFURLRef类型的url参数,要新建一个NSString来做桥接转换(bridge),而这个NSString的值,就是上面的音频文件路径
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID);
    //播放提示音 带震动
    AudioServicesPlayAlertSound(soundID);
    //播放系统声音
    //    AudioServicesPlaySystemSound(soundID);
}
-----------错误记录

Undefined symbols for architecture i386:

  "_OBJC_CLASS_$_JPUSHRegisterEntity", referenced from:

      objc-class-ref in AppDelegate.o

  "_OBJC_CLASS_$_JPUSHService", referenced from:

      objc-class-ref in LoginViewController.o

      objc-class-ref in AppDelegate.o

ld: symbol(s) not found for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

原因查了很多地方,后来才发现只是因为打包时把product-schemes-run的环境改成release了,改回debug就没这个错误了.

 

posted on 2017-10-21 13:08  守望远方  阅读(3524)  评论(0编辑  收藏  举报