【问题标题】:Unable to send Push Notifications from Web(JavaScript) QuickBlox无法从 Web(JavaScript) QuickBlox 发送推送通知
【发布时间】:2016-03-30 12:04:58
【问题描述】:

我正在尝试使用 QuickBlox 推送通知 API 从 Web 后端 (JavaScript) 向 iOS 设备发送推送通知。我在 iOS 应用上创建了订阅,并尝试从 JavaScript 向订阅用户发送推送通知。

要订阅的iOS App代码如下:

- (void)loginAndConnectToChatQBUserWithLoginName:(NSString *)loginName password:(NSString *)password{
    isConnecting = YES;

    QBUUser *user = [[QBUUser alloc] init];
    user.login = loginName;
    user.password = password;

    __weak typeof(self) weakSelf = self;

    //Authenticate user

    [QBRequest logInWithUserLogin:user.login password:user.password successBlock:^(QBResponse * _Nonnull response, QBUUser * _Nullable user) {
        NSLog(@"Logged in");
        [weakSelf registerForRemoteNotifications];

        [AppDelegate appDelegate].currentUser = user;

        user.password = password;

        [QBChat.instance connectWithUser:user completion:^(NSError * _Nullable error) {
            if (QBChat.instance.isConnected) {
                NSLog(@"chat is connected");
            }
            else{
                NSLog(@"chat not connected");
            }

            isConnecting = NO;
        }];
    } errorBlock:^(QBResponse * _Nonnull response) {
        // Handle error here
        NSLog(@"Unable to connect");
        isConnecting = NO;
    }];
}

- (void)registerForRemoteNotifications{

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {

        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else{
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
    }
#else
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
#endif
}

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSString *deviceIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

    QBMSubscription *subscription = [QBMSubscription subscription];
    subscription.notificationChannel = QBMNotificationChannelAPNS;
    subscription.deviceUDID = deviceIdentifier;
    subscription.deviceToken = deviceToken;

    [QBRequest createSubscription:subscription successBlock:^(QBResponse *response, NSArray *objects) {
        //Subscription Successfull
        NSLog(@"Subscription Successfull.");

    } errorBlock:^(QBResponse *response) {
        //Subscription Failure
    }];
}

创建订阅成功响应如下:

[QBResponse], status: 201

从 JavaScript 发送推送通知的代码如下:

var pushCustomParams = {
  message: 'Message received from Bob',
  ios_badge: 1,
  ios_sound: 'mysound.wav', //Sound File name
  user_id: '234', //Caller User ID
}

var params = {
  notification_type: 'push',
  user: {ids: [110678]}, // recipients.
  environment: 'development', // environment, can be 'production' as well.
  message: QB.pushnotifications.base64Encode(JSON.stringify(pushCustomParams))
};

QB.pushnotifications.events.create(params, function(err, response) {
  if (err) {
    console.log(err);
  } else {
    // success
  }
});

在创建事件时我一直收到错误:

[EventsProxy] create Object { notification_type:"push", user:Object,environment:"development",message:"ey....."}

[ServiceProxy] Request: POST Object {data:"{"url":"https://api.quickblox.com/e.."}

[ServiceProxy] ajax error 401 Unauthorized {"errors" : ["Token is required"]}

Object {code:401, status:"error", message:"Unauthorized", detail:"{errors"["Token is required"]}"}

请建议我在代码中做错了什么。

【问题讨论】:

    标签: javascript ios push-notification quickblox


    【解决方案1】:

    为了发送推送,您必须充当用户

    为此,您必须与用户创建会话

    所以你的代码应该是这样的:

    var params = {login: 'garry', password: 'garry5santos'};
    
    QB.createSession(params, function(err, result) {
      if(!err){
        // send a push code
      }
    });
    

    【讨论】:

    • 现在网络上没有错误,通知也排队到 quickblox push 的列表中,但设备上没有通知。当我从 Web 控制台发送时,我能够接收推送。请建议下一步做什么。
    • @RaviGupta 请检查您是否已在 iOS 应用上正确设置了所有内容:quickblox.com/developers/SimpleSample-messages_users-ios
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    相关资源
    最近更新 更多