背景:
我正在用Xamarin.Forms创建一个内部移动应用程序,通过WebLink分发。我已经在Android和iOS上运行了几天了,但请求的是推送通知。我们决定和Pushwoosh一起提供这项服务。
我已经从pushwoosh复制了示例代码,并用我们的包名和密钥对其进行了修改,但由于某种原因,我得到了错误:应用程序无法启动。确保应用程序已安装到目标设备上,并且具有可启动的activity(MainLauncher=true)。
此外,请检查Build->Configuration Manager,以确保已将此项目设置为针对此配置进行部署。
我还应该注意到Pushwoosh使用了GCM,所以它也可能与此相关。
我尝试的内容:
1。我的第一步显然是检查配置管理器。它确实被设置为部署,并且被设置为编译x86(提到的其他问题的一些其他答案已经修复)
2。我确认我的mainactivity.cs文件中的activity是用mainlauncher=true独立设置的。
3。正如其他问题/答案所推荐的,我已经从虚拟Android中删除了该应用程序。(实际上我完全重置了虚拟设备)。
4。正如某些特定于GCM的QA中所提到的,我已经将我的包名全部改为小写。
我的相关代码:
[Activity(Label = "mobile", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
[IntentFilter(new string[] { "company.MESSAGE" }, Categories = new string[] { "android.intent.category.DEFAULT" })]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
LocalMessageBroadcastReceiver mMessageReceiver;
LocalRegisterBroadcastReceiver mRegisterReceiver;
bool mBroadcastPush = true;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
mMessageReceiver = new LocalMessageBroadcastReceiver();
mMessageReceiver.activity = this;
mRegisterReceiver = new LocalRegisterBroadcastReceiver();
mRegisterReceiver.activity = this;
registerReceivers();
PushManager manager = PushManager.GetInstance(this);
manager.OnStartup(this);
//Register for push!
manager.RegisterForPushNotifications();
checkMessage(Intent);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
protected override void OnNewIntent(Intent intent)
{
checkMessage(intent);
}
public void checkMessage(Intent intent)
{
if (null != intent)
{
if (intent.HasExtra(PushManager.PushReceiveEvent))
{
doOnMessageReceive(intent.Extras.GetString(PushManager.PushReceiveEvent));
}
else if (intent.HasExtra(PushManager.RegisterEvent))
{
doOnRegistered(intent.Extras.GetString(PushManager.RegisterEvent));
}
else if (intent.HasExtra(PushManager.UnregisterEvent))
{
doOnUnregisteredError(intent.Extras.GetString(PushManager.UnregisterEvent));
}
else if (intent.HasExtra(PushManager.RegisterErrorEvent))
{
doOnRegisteredError(intent.Extras.GetString(PushManager.RegisterErrorEvent));
}
else if (intent.HasExtra(PushManager.UnregisterErrorEvent))
{
doOnUnregistered(intent.Extras.GetString(PushManager.UnregisterErrorEvent));
}
resetIntentValues();
}
}
public void doOnRegistered(String registrationId)
{
// code to run if device has succesfully registered
}
public void doOnRegisteredError(String errorId)
{
// code to run if device failed to register
}
public void doOnUnregistered(String registrationId)
{
// code to run if device has succesfully unregistered
}
public void doOnUnregisteredError(String errorId)
{
// code to run if device failed to unregister properly
}
public void doOnMessageReceive(String message)
{
// code to run when device receives notification
}
private void resetIntentValues()
{
Intent mainAppIntent = Intent;
if (mainAppIntent.HasExtra(PushManager.PushReceiveEvent))
{
mainAppIntent.RemoveExtra(PushManager.PushReceiveEvent);
}
else if (mainAppIntent.HasExtra(PushManager.RegisterEvent))
{
mainAppIntent.RemoveExtra(PushManager.RegisterEvent);
}
else if (mainAppIntent.HasExtra(PushManager.UnregisterEvent))
{
mainAppIntent.RemoveExtra(PushManager.UnregisterEvent);
}
else if (mainAppIntent.HasExtra(PushManager.RegisterErrorEvent))
{
mainAppIntent.RemoveExtra(PushManager.RegisterErrorEvent);
}
else if (mainAppIntent.HasExtra(PushManager.UnregisterErrorEvent))
{
mainAppIntent.RemoveExtra(PushManager.UnregisterErrorEvent);
}
Intent = mainAppIntent;
}
protected override void OnResume()
{
base.OnResume();
registerReceivers();
}
protected override void OnPause()
{
base.OnPause();
unregisterReceivers();
}
public void registerReceivers()
{
IntentFilter intentFilter = new IntentFilter(PackageName + ".action.PUSH_MESSAGE_RECEIVE");
if (mBroadcastPush)
{
RegisterReceiver(mMessageReceiver, intentFilter);
}
RegisterReceiver(mRegisterReceiver, new IntentFilter(PackageName + "." + PushManager.RegisterBroadCastAction));
}
public void unregisterReceivers()
{
UnregisterReceiver(mMessageReceiver);
UnregisterReceiver(mRegisterReceiver);
}
}
1
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.company.mobile" android:versionCode="1" android:versionName="1.9.8"> <!--GCM for Pushwoosh--> <permission android:name="PACKAGE_NAME.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="PACKAGE_NAME.permission.C2D_MESSAGE" /> <uses-sdk android:minSdkVersion="15" /> <application android:label="Company Mobile" android:icon="@drawable/icon"> <meta-data android:name="com.google.android.gms.version" android:value="XXXXXXXX" /> <meta-data android:name="PW_APPID" android:value="XXXXX-XXXXX" /> <meta-data android:name="PW_PROJECT_ID" android:value="XXXXXXX-XXXXXX-XXXXXXX" /> <!--GCM--> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.company.mobile" /> </intent-filter> </receiver> </application> </manifest>
我承认我是android开发的新手(但不是.NET或C#),所以这可能是比较明显的事情,但我很茫然。我已经看过了我能找到的与此相关的每一个问题,没有一个解决方案有用。有人能看出我做错了什么吗?
我相信在这两行:
<permission android:name="PACKAGE_NAME.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="PACKAGE_NAME.permission.C2D_MESSAGE" />
该PACKAGE_NAME应更改为您的实际包名,在您的示例中为com.company.mobile
(
元素中的package
属性)。
所以请尝试:
<permission android:name="com.company.mobile.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.company.mobile.permission.C2D_MESSAGE" />
由于某些原因,当我尝试创建AVD时,“确定”按钮不可点击。有人知道我做错了什么吗?
我无法让我的Spring Boot站点在Azure Web实例上响应。我遵循了Java应用程序说明和上传说明。IIS服务器似乎正在接收请求,但战争中的servlet没有响应。根据留档,有几个问题。特别是,web.config应该部署到www root,并指定java路径和转发端口。我相信我已经涵盖了这些基础——我的web.config贴在下面。 我确实尝试过从市场上部署tomcat服务器,效果很好
我是Android开发新手,创建一个新的AVD有问题。我使用的是英特尔®酷睿™i5-4670 CPU@3.40GHz×4,64位操作系统上运行的Ubuntu 14.04。 我已经看了这里的讨论,但它对我没有帮助。 我还成功安装了英特尔网站上给出的KVM。但在创建新的AVD时,我没有发现任何CPU/ABI系统映像,如下所示: 更新:我的Android SDK管理器是这样的: 我不知道我错过了什么。请
嘿,我已经尝试了几天了,我已经遍历了文档,我遵循了教程,当我试图将react应用程序部署到github页面时,我无法通过npm运行部署。我将npm称为运行构建,我将正确的url放置到package.json作为“主页”,我再次调用它并获得“部署”和“预部署”,我在节点模块中肯定有gh-pages,我的意思是我得到了所有我遵循的每一个步骤,每个教程都可以告诉我。我遇到了一个问题,内容如下: 错误:无
我试图通过更新apache-tomcat-8.0.39\conf\catalina.properties在带有选项strict_servlet_compliance=true的Tomcat 8.0.39上部署一个应用程序,但一旦我这样做,我的应用程序部署就失败了。也就是说,我开始出现错误:SEVERE[localhost-startStop-1]org.apache.tomcat.util.dig
我的android应用程序没有正确构建和部署。当启动一个新实例时,它会将我的应用程序启动到我的物理移动设备上,并且我能够在Visual Studio中进行调试。但现在它不会将应用程序启动到移动设备,而且当我手动运行应用程序时,它也不会在Visual Studio中调试。这个项目有可移植的类,并且正在使用Xamarin.Forms。 我确实更改了对AndroidManifest.xml的构建操作。