几天后,新的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();
}
}
提前致谢,
埃里克
答案 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
的自定义推送通知标记