2012-04-26 79 views
1

我是新来的android,我有问题在实施推送通知。c2dm返回应用程序ID为空

正如我读过的教程中所述,我在c2dm中注册并获得了Auth令牌,然后在包含xxxx的UrbanAirShip中注册,获得了应用密钥和秘密。

我的项目团队最初使用API​​ 2.1,那时候我通过氦气传输获得AppId,无论是在设备还是仿真器中。

然后我们将API改为2.2,那时我再次在c2dm中注册了另一个发件人ID,获得了Auth令牌,并且又在UrbanAirShip上注册了新账户, 得到了密钥和秘密。

对于通过C2DM运输第一几次尝试,我得到的AppId,然后如下表明我只拿到了空,无论是在设备和有错误的模拟器,

我不知道是什么出了问题,是否改变API级别,或在c2dm中注册多个发件人ID,或者在同一个包名称中进行多次注册或在UrbanAirShip中注册多个或多次卸载。 我已经添加了Manifest文件和Application的oncreate方法,请指导我取回AppId。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="xxxx" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" > 
    </uses-permission> 
    <uses-permission android:name="com.android.vending.BILLING" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" /> 
    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
    <uses-permission android:name="android.permission.RECORD_VIDEO" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.SEND_SMS" />  
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
    <uses-permission android:name="android.permission.VIBRATE"/> 

    <!-- REQUIRED for C2DM --> 
    <!-- Only this application can receive the messages and registration result --> 
    <permission android:name="xxxx" android:protectionLevel="signature" /> 
    <uses-permission android:name="xxxx.permission.C2D_MESSAGE" /> 
    <!-- This app has permission to register and receive message --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <supports-screens 
     android:anyDensity="true" 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="true" /> 

    <uses-sdk 
     android:minSdkVersion="4" 
     android:targetSdkVersion="10" /> 

    <application 
     android:icon="@drawable/logo" 
     android:label="@string/app_name" 
     android:name="xx" 
     android:debuggable="true" 
     android:allowClearUserData="true" 
     android:enabled="true" > 

     <activity 
      android:label="@string/app_name" 
      android:name=".activities.SplashActivity" 
      android:screenOrientation="portrait" > 
      <intent-filter > 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
.... 
<!-- REQUIRED --> 
     <receiver android:name="com.urbanairship.CoreReceiver"> 
      <!-- REQUIRED IntentFilter - For Helium and Hybrid --> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.ACTION_SHUTDOWN" /> 
      </intent-filter> 
     </receiver> 

     <!-- REQUIRED for C2DM and Hybrid --> 
     <receiver android:name="com.urbanairship.push.c2dm.C2DMPushReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND"> 
      <!-- Receive the actual message --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="xxxx" /> 
      </intent-filter> 
      <!-- Receive the registration id --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="xxxx" /> 
      </intent-filter> 
     </receiver> 

     <!-- REQUIRED --> 
     <!-- The 'android:process' parameter is optional. Set it to a value starting 
      with a colon (:) to make it run in a separate, 
      private process --> 
     <service android:name="com.urbanairship.push.PushService" 
       android:process=":com.urbanairship.push.process"/> 

     <!-- OPTIONAL, if you want to receive push, push opened and registration completed intents --> 
     <receiver android:name="xxx.push_notifications.IntentReceiver" /> 


     <service android:name="xxx.inapp.BillingService" /> 

     <receiver android:name="xxx.inapp.BillingReceiver" > 
      <intent-filter > 
       <action android:name="com.android.vending.billing.IN_APP_NOTIFY" /> 
       <action android:name="com.android.vending.billing.RESPONSE_CODE" /> 
       <action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" /> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 
+0

指这个http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html – 2012-04-26 04:34:21

+0

坚持一秒钟... – Will 2012-05-03 13:46:16

回答

0

当您在模拟器中运行时出现问题。您需要在设备上运行它(并且应该设置Gmail帐户 - 否则会出现错误)。另外,它应该是2.2+。 Push仅在2.2+设备上受支持。将minSDK版本更改为2.2并在设备中尝试。它会工作。

+0

您好nithin,尝试在2.3 API和谷歌帐户的设备,仍然是相同的错误。 – user1357724 2012-04-26 08:59:26

+0

你可以尝试重启设备吗?它为我解决了这个问题。 – nithinreddy 2012-04-26 09:03:12

+0

抱歉,这是错的。只要您使用模拟器的“Google API”版本,就可以在模拟器中运行c2dm。 – 2012-05-03 15:57:37

0

你需要确保你使用你想要的SDK的“谷歌API”版本,也有一个有效的谷歌帐户,这是市场启用。这是c2dm的要求。

相关问题