Cordova 推送通知 - 注册标签

Posted

技术标签:

【中文标题】Cordova 推送通知 - 注册标签【英文标题】:Cordova Push Notification - Register Tags 【发布时间】:2017-04-19 01:05:40 【问题描述】:

初次注册后如何注册额外的推送通知标签?以下代码成功注册标签(arrTags):

pushRegistration.on('registration', function (data) 
   ...
   if (platform == 'android' || platform == 'Android') 
      // Register for GCM notifications.
      AzureDbSvc.client.push.register('gcm', handle, 
        mytemplate:  body:  data:  message: "$(messageParam)"  , tags: arrTags 
      );
   
   ...

既然标签已注册,我该如何注册其他标签?例如,如果 arrTags 最初包含 4 个标签,我将如何随后(稍后)注册第 5 个或第 6 个标签?

【问题讨论】:

【参考方案1】:

您可以通过调用此函数AzureDbSvc.client.push.register() 使用标签更新注册,因为注册本身是暂时的。

另外,您可以尝试在后台管理注册,可以参考Registration Management

【讨论】:

谢谢加里!那行得通。问题,我需要重新注册所有标签还是只注册一个被附加的标签?请查看我的解决方案和建议的改进。 通过测试发现,即使附加单个标签,所有标签都需要重新注册。查看我的解决方案。【参考方案2】:

以下是我的代码 - 添加新标签无需重新初始化即可工作。请让我知道任何建议。

用法:

    初始化 - 调用 registerForPushNotifications(arrTags)。 添加或删除标签 - 使用完整的标签数组调用 registerTags(arrTags) (减去任何要删除的内容)。 注销所有标签 - 调用 unregister()

代码:

appServices.factory('AzurePshNtfnSvc', function ($ionicPopup, MsgSvc) 
var pushRegistration = null;
var regData = null;
...

/// Push Notification Registration ///
function registerForPushNotifications(arrTags) 
    pushRegistration = PushNotification.init(
        android:  senderID: 'YourID#' ,
        ios:  alert: 'true', badge: 'true', sound: 'true' ,
        wns: 
    );

    // Handle the registration event.
    pushRegistration.on('registration', function (data) 
        regData = data;
        registerTags(arrTags);
    );

    pushRegistration.on('notification', function (data) 
        alert('Push Received: ' + data.message);
        MsgSvc.prepForPushNotification(data);
    );

    pushRegistration.on('error', handleError);


// Now I can call AzurePshNtfnSvc.registerTags from anywhere in the app
// and delete or add a tag.
function registerTags(arrTags) 
    // Get the native platform of the device.
    var platform = device.platform;
    // Get the handle returned during registration.
    var handle = regData.registrationId;
    // Set the device-specific message template.
    if (platform == 'android' || platform == 'Android') 
        // Register for GCM notifications.
        AzureDbSvc.client.push.register('gcm', handle, 
            mytemplate:  body:  data:  message: "$(messageParam)"  , tags: arrTags 
            // example: mytemplate:  body:  data:  message: "$(messageParam)"  ,
            //          tags: ["mynotificationtag", "anothertag"]     
            // site: https://github.com/Azure/azure-mobile-apps-cordova-client/issues/32
        );
     else if (device.platform === 'iOS') 
        // Register for notifications.
        AzureDbSvc.client.push.register('apns', handle, 
            mytemplate:  body:  aps:  alert: "$(messageParam)"   
        );
     else if (device.platform === 'windows') 
        // Register for WNS notifications.
        AzureDbSvc.client.push.register('wns', handle, 
            myTemplate: 
                body: '<toast><visual><binding template="ToastText01"><text id="1">$(messageParam)</text></binding></visual></toast>',
                headers:  'X-WNS-Type': 'wns/toast' 
            
        );
    


// Unregister all tags, called when exiting app
function unregister() 
    return new Promise(function (resolve, reject) 
        if (pushRegistration == null) 
            return resolve();
         else 
            pushRegistration.unregister(function () 
                console.log('success');
                resolve();
            , function () 
                console.log('error');
                reject();
            );
        
    );

...

【讨论】:

以上是关于Cordova 推送通知 - 注册标签的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cordova 推送插件向我的所有设备发送推送通知

使用 Telerik Appbuilder 注册推送 IOS 通知

用于单一注册的cordova、Phonegap 推送插件和c#?

推送通知未注册请求的标签

IBM Bluemix 中的推送通知注册选项卡位置

解析推送通知:iOS 设备令牌未定义