javascript - 无法从 Web(JavaScript) QuickBlox 发送推送通知

标签 javascript ios push-notification quickblox

我正在尝试使用 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"]}"}

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

最佳答案

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

为此,您必须与用户创建 session

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

var params = {login: 'garry', password: 'garry5santos'};

QB.createSession(params, function(err, result) {
  if(!err){
    // send a push code
  }
});

关于javascript - 无法从 Web(JavaScript) QuickBlox 发送推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36308353/

相关文章:

IOS 推送通知深层链接?

javascript - 无法获取 Vue 状态的元素 (Vue.js/JS/TS)

javascript - React/Redux 从组件简单访问 Store

ios - iOS 和 Core Data 中 for 循环中奇怪的多个日志输出

java - 静默推送 iOS 重启后不起作用

google-chrome - 我可以使用Web App的私钥证书来签署JWT吗?

JavaScript 错误 : ReferenceError: edit is not defined edit(this);

javascript - 在javascript类中获取文档计数列表

iphone - 下一步按钮不显示

ios - 使用 Facebook Graph API 获取最近的雇主