Xamarin Google Cloud Messaging GcmClient.CheckDevice(this)导致运行时错误

约翰·塞巴斯蒂安·奥斯皮纳(Johan Sebastian Ospina)

因此,我正在尝试使用Xamarin中的Google Cloud Messaging Client组件向GCM注册我的应用程序。

但是,无论何时在应用程序中运行此代码,都会在GcmClient.CheckDevice(this)方法调用中出现运行时错误。该按钮位于主要活动及其中,因此我可以控制何时开始注册过程。

我正在使用Xamarin播放器模拟器来加载应用程序。

button.Click += (object sender, EventArgs e) => 
        {
            GcmClient.CheckDevice(this);
            GcmClient.CheckManifest(this);

            var preferences = GetSharedPreferences("AppData", FileCreationMode.Private);
            var deviceid = preferences.GetString("DeviceId", "");
            if (string.IsNullOrEmpty(deviceid))
            {
                Toast.MakeText(this, "I'm here", ToastLength.Short).Show();
                GcmClient.Register(this, GcmBroadcastReceiver.SENDER_IDS);
            }

        };

任何援助都将得到极大的应用。这是我的清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="my_package_name">
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
    <application android:label="patientFlowNotifications"></application>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
</manifest>
斯蒂芬·瓦尼泽克(Stefan Wanitzek)

Xamarin Player模拟器默认不附带Google Play服务。您需要手动安装它们才能使用GCM:

http://developer.xamarin.com/guides/android/getting_started/installation/android-player/

Android社区中的独立开发人员已将Google Apps和Google Play服务打包为可刷新的zip格式。可以按照以下步骤自行在Xamarin Android Player上安装Google Apps和Google Play服务:

从互联网上下载软件包。有许多来源,一个可能的来源是CyanogenMod网站。启动Android Player并解锁。将下载的zip文件拖放到Android Player上。重新启动Android Player。

不可避免地会导致异常但会阻止您的应用程序按预期运行的另一点是,您尚未在清单中声明任何意图过滤器,并且缺少了特定于应用程序的CDM-Permission。

<permission android:name="your.package.name.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="your.package.name.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章