2012-04-26 81 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的要求。

相關問題