将Xamarin GCM设备令牌与登录用户关联

本文关键字:登录 用户 关联 令牌 Xamarin GCM | 更新日期: 2023-09-27 18:29:43

我正在学习Xamarin关于如何向Android设备发送推送通知的教程[1]。举个例子,这非常有效。

但是,我很难弄清楚如何将设备令牌与当前登录的用户相关联。本教程对如何获取设备令牌并将其发送到应用程序服务器进行了非常基本的演示(自定义实现需求,我使用一个简单的RESTneneneba API)。但是,连接到应用程序服务器的所有逻辑都包含在IntentService中。

要将设备令牌与登录用户关联,我假设我有两个选项:

  • a) 以某种方式将用户信息注入到CCD_ 2中
  • b) 让IntentServiceOnHandleIntent处理程序中发出我的应用程序可以响应的自定义事件

由于我想同时为Android和iOS实现推送通知,理想情况下"b"将是最好的选择,因为我可以创建更好的抽象,但我想目前这两种解决方案都是可行的。

考虑到这些选项,将设备令牌与当前登录的用户相关联的好策略是什么?

[1]https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/android/remote_notifications_in_android

将Xamarin GCM设备令牌与登录用户关联

这不仅仅是关联部分。你的服务器必须能够向谷歌gcm和苹果apn发送推送通知。我想知道你是否已经涵盖了这一部分。手动操作会很痛苦。如果您在服务器端使用.NET,请签出此库。这是另一个python/django

关联部分可以在web api控制器中轻松完成。基本上你需要:

  1. 设备注册表(1对多):用户id外键+注册id/令牌
  2. 创建一个控制器POST方法,将用户id(带有实际用户的fk)+注册id/令牌保存到上一个表
  3. 用户登录您的应用程序后,运行所有gmc/apn注册过程
  4. 一旦您获得注册id/令牌,请将其发送到控制器

事实上,还有许多其他细节需要实现,比如:

  1. 如果您为同一用户获得2/3不同的注册ID,会发生什么
  2. 您应该提供另一个REST方法来注销,并调用它例如当用户在移动应用程序中注销时
  3. 等等

有一些libs在处理这一切。我建议你看一看,选一个。

编辑

另一种选择是订阅另一个标签,该标签将完全是用户id"topic/id"

您需要发送带有url的唯一android_id,比如,其中regid是你得到的代币,

您将从中获得:android_id=Settings.Secure.getString(getContentResolver(),Settings.Secure.android_id);

 String url = "https://push.monitoring.computer/api/notification/device/register/" + "1/" + regid + "/android/" + android_id;
        try {
            URL url1 = new URL(url);
            URLConnection uc = url1.openConnection();
            String basicAuth = Base64.encodeToString((APIKEY).getBytes("UTF-8"), Base64.NO_WRAP);
            uc.setRequestProperty("Authorization", basicAuth);
            InputStream in = uc.getInputStream();
            // Log.e(TAG, "response: " + response);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        },

这是java代码,可以很容易地转换为c#