方法:使用CustomAuthController

时间:2017-01-12 07:26:03

标签: azure-mobile-services

几天后,新的Azure服务器和客户端SDK可用。我在2016年11月的App Service Push https://github.com/Azure/azure-mobile-apps-net-server/issues/170#issuecomment-262656329中遇到了这个问题。

阅读发布博客https://blogs.msdn.microsoft.com/appserviceteam/2017/01/10/azure-mobile-apps-net-sdk-releases/后,我现在可以看到当前的内容 注册推送通知的方式是已弃用

您能否详细说明我需要更改以使用新的App Service Push?

之前的问题是

  

_UserId(SID)

推送通知安装中标记未正确包含。 _UserId具有NameIdentifier的MD5哈希值,而不是我传递给CustomAuthController的客户端唯一ID。但我之后需要我的客户端使用

向客户提供有针对性的推送通知
  

_UserId =客户端 - 唯一ID

以下是我在Android中的当前代码:

protected override void OnRegistered(Context context, string registrationId)
    {
        Log.Verbose("PushHandlerBroadcastReceiver", "GCM Registered: " + registrationId);
        App.NotificationHubInstallationId = registrationId;

        //await RegisterForPushNotifications(OfflineSyncStoreManager.Instance.MobileAppClient, MainActivity.CurrentActivity);

        MainActivity.CurrentActivity.RunOnUiThread(async () =>
        {
            if (GcmClient.IsRegistered(context))
            {
                try
                {
                    var pushHub = OfflineSyncStoreManager.Instance.MobileAppClient.GetPush();
                    const string templateBodyGcm = "{\"data\":{\"message\":\"$(messageParam)\"}}";

                    var templates = new JObject
                    {
                        ["genericMessage"] = new JObject
                        {
                            {"body", templateBodyGcm}
                        }
                    };

                    //NOTE: Unregister any previous NotificationHub Installation of the TruckerApp on that device
                    await pushHub.UnregisterAsync().ConfigureAwait(false);

                    //NOTE_ Register the TruckerApp for Push Notification in the backend.
                    await pushHub.RegisterAsync(registrationId, templates).ConfigureAwait(false);

                    MetricsManager.TrackEvent($"PushNotificationHub-{OfflineSyncStoreManager.Instance.MobileAppClient.CurrentUser.UserId}",
                        new Dictionary<string, string>
                        {
                            {"NotificationHubInstallationId", registrationId}
                        },
                        new Dictionary<string, double>());


                    Log.Info("Push Installation Id", App.NotificationHubInstallationId);
                }
                catch (Exception ex)
                {
                    await MetricsManagerHelper.Instance.SendErrorToApplicationInsightsAsync($"PushNotificationHub Registration failed for reason: {ex.Message}");
                    DialogNotify("AZURE PUSH Registierungsfehler", "Pushmeldungen sind derzeit nicht verfügbar. " + Environment.NewLine + Environment.NewLine +
                                                                   "Um neue Aufträge auf Ihr Handy zu übertragen ziehen " +
                                                                   "Sie bitte in der Truck Auftrag Übericht (hier!) " +
                                                                   "mit dem Finger von OBEN -> nach -> UNTEN." +
                                                                   Environment.NewLine +
                                                                   Environment.NewLine);
                }
            }
            else
            {
                await MetricsManagerHelper.Instance.SendErrorToApplicationInsightsAsync("GCM/FCM Client is not registered at Google");
                DialogNotify("GCM/FCM Push Registrierungsfehler", "Sei konnten nicht beim Google Cloud Messaging angemeldet werden. " +
                                                                  "Versuchen Sie bitte ein ReLogin oder um neue Aufträge " +
                                                                  "auf Ihr Handy zu übertragen, ziehen " +
                                                                  "Sie bitte in der Truck Auftrag Übericht (hier!) " +
                                                                  "mit dem Finger von OBEN -> nach -> UNTEN." +
                                                                  Environment.NewLine +
                                                                  Environment.NewLine);
            }
        });
    }

这是我目前在iOS中的代码:

// We've successfully registered with the Apple notification service, or in our case Azure
    public override async void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        try
        {
            const string templateBodyApns = "{\"aps\":{\"alert\":\"$(messageParam)\"}}";

            JObject templates = new JObject();
            templates["genericMessage"] = new JObject
            {
                {"body", templateBodyApns}
            };

            // Register for push with your mobile app
            Push push = OfflineSyncStoreManager.Instance.MobileAppClient.GetPush();
            await push.RegisterAsync(deviceToken, templates);
        }
        catch (Exception e)
        {
            UIAlertView avAlert = new UIAlertView("AZURE PUSH Registierungsfehler",
                "Pushmeldungen sind derzeit nicht verfügbar. " + 
                Environment.NewLine + 
                Environment.NewLine +
                "Um neue Aufträge auf Ihr Handy zu übertragen ziehen " +
                "Sie bitte in der Truck Auftrag Übericht (hier!) " +
                "mit dem Finger von OBEN -> nach -> UNTEN." +
                Environment.NewLine +
                Environment.NewLine,
                null,
                "OK",
                null);
            avAlert.Show();
        }
    }

提前致谢,

埃里克

2 个答案:

答案 0 :(得分:0)

您不需要取消注册然后注册 - 一个简单的寄存器就可以完成。

查看本书的第5章 - http://aka.ms/zumobook - 本章中的每种类型的推送注册都有代码,其中包含安装方法(您可以在其中一起指定标签和模板)。然后,您可以通过构建适合您需要的标记来明确指定SID。

答案 1 :(得分:0)

一种保存方式是使用Azure Mobile Client installationId,将其保留在后端,并将该Id用于针对该单个客户端的目标推送通知。而是将推送通知发送到_UserId:your-userid帖子$installationId:your-clients-zumo-client-id

但是这需要您将installationId存储在后端SQL Server或其他缓存中(例如Redis)

更好的解决方案是遵循以下两个链接:

常规应用服务推送通知安装ZUMO Book

以及Custom Tag Blog

的自定义推送通知标记