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

时间:2016-01-10 00:50:52

标签: c# android xamarin

我正在研究如何将推送通知发送到Android设备的Xamarin教程[1]。例如,这很有效。

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

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

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

由于我想为Android和iOS实现推送通知,理想情况下'b'将是最佳选择,因为我可以创建更好的抽象,但我想其中任何一种解决方案都是可行的。

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

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

2 个答案:

答案 0 :(得分:0)

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

的另一个

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

  1. 设备注册的表(1到多个):用户ID外键+注册 ID /令牌
  2. 创建控制器POST方法以将用户ID(使用fk保存到实际用户)+注册ID /令牌保存到上一个表
  3. 用户登录您的应用后,运行所有gmc / apn注册 过程
  4. 获得注册ID /令牌后,将其发送给控制器
  5. 事实上,还有许多其他细节需要实施,例如:

    1. 如果您为同一个用户获得2/3个不同的注册ID会怎样?
    2. 您应该提供另一种REST方法来取消注册并调用它 例如,当用户在移动应用程序中注销时。
    3. 等等...
    4. 有些图书馆正在处理这一切。我建议你看看并选择一个。

      修改

      另一个选择是订阅另一个标签,该标签恰好是用户ID“topics / id”

答案 1 :(得分:0)

你需要发送带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();
        },

这是可以轻松转换为c#

的java代码