Android 未注册设备Aerogear

Android 未注册设备Aerogear,android,push-notification,google-cloud-messaging,aerogear,Android,Push Notification,Google Cloud Messaging,Aerogear,我正在使用Aerogear和OpenShift实现和Android应用程序来发送和接收推送通知。 我在注销设备时遇到问题,如果我打开应用程序并注册设备,我可以发送通知,一切正常,如果我尝试注销设备也正常工作,我的问题是当我关闭应用程序并注册设备时,如果我重新启动应用程序并想注销设备,我会遇到以下错误: “服务器返回了错误代码404” 07-11 21:07:32.436 21158-21245/?D/GCM﹕ GcmService start Intent{act=com.google.andr

我正在使用Aerogear和OpenShift实现和Android应用程序来发送和接收推送通知。 我在注销设备时遇到问题,如果我打开应用程序并注册设备,我可以发送通知,一切正常,如果我尝试注销设备也正常工作,我的问题是当我关闭应用程序并注册设备时,如果我重新启动应用程序并想注销设备,我会遇到以下错误:

“服务器返回了错误代码404”

07-11 21:07:32.436 21158-21245/?D/GCM﹕ GcmService start Intent{act=com.google.android.c2dm.Intent.UNREGISTER pkg=com.google.android.gms cmp=com.google.android.gms/.gcm.GcmService(有附加服务)}com.google.android.c2dm.Intent.UNREGISTER 07-11 21:07:32.606 20520-20520/? D/wpa\U请求人﹕ RX ctrl_iface-六角转储(len=11):53 49 47 4e 41 4c 5f 50 4f 4c 4c 07-11 21:07:32.606 20520-20520/? D/wpa\U请求人﹕ wlan0:控制接口命令“信号轮询” 07-11 21:07:32.606 20520-20520/? D/wpa\U请求人﹕ nl80211:缺少调查数据

这是我的实际代码

    btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
RegistrarManager.config(PUSH_REGISTER_NAME, AeroGearGCMPushConfiguration.class)
.setPushServerURI(new URI(UNIFIED_PUSH_URL))
.setSenderIds(GCM_SENDER_ID)
.setVariantID(VARIANT_ID)
.setSecret(SECRET)
.setAlias(ALIAS)
.setDeviceToken(ALIAS)
.asRegistrar();
PushRegistrar registrar = RegistrarManager.getRegistrar(PUSH_REGISTER_NAME);
registrar.register(getActivity().getApplicationContext(), new Callback<Void>() {
@Override
public void onSuccess(Void ignore) {
Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT).show();
}   
@Override
public void onFailure(Exception exception) {
Toast.makeText(getActivity(), exception.getMessage(), Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
btnUnregister = (Button)mInflatedView.findViewById(R.id.btnUnregister);
btnUnregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
RegistrarManager.config(PUSH_REGISTER_NAME, AeroGearGCMPushConfiguration.class)
.setPushServerURI(new URI(UNIFIED_PUSH_URL))
.setSenderIds(GCM_SENDER_ID)
.setVariantID(VARIANT_ID)
.setSecret(SECRET)
.setAlias(ALIAS)
.setDeviceToken(ALIAS)
.asRegistrar();
PushRegistrar registrar = RegistrarManager.getRegistrar(PUSH_REGISTER_NAME);
registrar.unregister(getActivity().getApplicationContext(), new Callback<Void>() {
@Override
public void onSuccess(Void ignore) {
Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT).show();
}

@Override
public void onFailure(Exception exception) {
Toast.makeText(getActivity(), exception.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}catch(Exception e){
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
btnRegister.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
registerManager.config(推送寄存器名称,AeroGearGCMPushConfiguration.class)
.setPushServerURI(新URI(统一推送URL))
.setSenderIds(GCM\u发送方\u ID)
.setVariantID(变量_ID)
.setSecret(秘密)
.setAlias(别名)
.setDeviceToken(别名)
.asregistrator();
pushregister=registermanager.getregister(PUSH\u REGISTER\u NAME);
register.register(getActivity().getApplicationContext(),new Callback()){
@凌驾
成功时公开作废(作废忽略){
Toast.makeText(getActivity(),“SUCCESS”,Toast.LENGTH_SHORT.show();
}   
@凌驾
失败时公共无效(异常){
Toast.makeText(getActivity(),exception.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}捕获(例外e){
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
});
btnUnregister=(按钮)mInflatedView.findViewById(R.id.btnUnregister);
btunregister.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
试一试{
registerManager.config(推送寄存器名称,AeroGearGCMPushConfiguration.class)
.setPushServerURI(新URI(统一推送URL))
.setSenderIds(GCM\u发送方\u ID)
.setVariantID(变量_ID)
.setSecret(秘密)
.setAlias(别名)
.setDeviceToken(别名)
.asregistrator();
pushregister=registermanager.getregister(PUSH\u REGISTER\u NAME);
registrator.unregister(getActivity().getApplicationContext(),new Callback()){
@凌驾
成功时公开作废(作废忽略){
Toast.makeText(getActivity(),“SUCCESS”,Toast.LENGTH_SHORT.show();
}
@凌驾
失败时公共无效(异常){
Toast.makeText(getActivity(),exception.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}捕获(例外e){
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
});

有什么建议可以解决这个问题吗?

我不确定它是否对我有效(不是总是这样的)。我突然想到的一件事是,在unregister块中,您不需要再次设置配置参数。你可以直接注册。你知道你使用的是哪个版本的UPS和哪个版本的Android库吗?另外,您是否尝试过在本地而不是OpenShift上运行UPS?我使用的是2.2.0版,我只尝试过使用OpenShift,我也尝试过这个链接中的代码,只要你打开应用程序,关闭应用程序,然后尝试注销,它就会工作。我会收到一个空指针异常,因为android找不到要执行“register.unregister(getApplicationContext(),new Callback()”的注册器对象要绕过NPE的东西,你应该把PushRegistrar.config的东西放到应用程序对象的onCreate方法中。这样无论对象是什么,都会一直存在。我不确定它是否对我有效(不是一直都是这样)。我突然想到的一件事是,在“注销”块中,您不需要再次设置配置参数。您可以全部注册。您是否知道您正在使用的UPS版本和Android库版本?另外,您是否尝试在本地而不是在OpenShif上运行UPSt?我使用的是2.2.0版,我只尝试过使用openshift,我也尝试过这个链接中的代码,只要你关闭应用程序并打开应用程序,它就会工作,然后你尝试注销,我会得到一个空指针异常,因为安卓找不到要执行“register.unregister”的注册器对象(getApplicationContext(),new Callback()“要绕过NPE的东西,你应该把PushRegistrar.config的东西放到应用程序对象的onCreate方法中。这样,不管对象是什么,都会一直存在。