1

私はAndroidを初めて使用しますが、プッシュ通知の実装に問題があります。

私が読んだチュートリアルで述べたように、私はc2dmに登録してAuthトークンを取得し、次にパッケージxxxxでUrbanAirShipに登録し、アプリキーとシークレットを取得しました。

私のプロジェクトチームは最初にAPI2.1を使用していましたが、その時点で、デバイスとエミュレーターの両方でヘリウムトランスポートを介してAppIdを取得しました。

次に、APIを2.2に変更しました。そのとき、別の送信者IDでc2dmに再度登録し、Authトークンを取得し、新しいアカウントでUrbanAirShipに再度登録し、キーとシークレットを取得しました。

c2dmトランスポートを介した最初の数回の試行で、AppIdを取得しましたが、デバイスとエミュレーターの両方でnullのみを取得し、以下に示すようなエラーが発生しました。

APIレベルの変更、c2dmでの複数のSender ID登録、同じパッケージ名のUrbanAirShipでの複数の登録、または非常に多くのアンインストールなど、何が問題になったかはわかりません。マニフェストファイルとアプリケーションの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>
4

2 に答える 2

0

エミュレータで実行すると問題が発生します。デバイスで実行する必要があります (Gmail アカウントをセットアップする必要があります - そうしないと、エラーが発生します)。また、2.2+ である必要があります。プッシュは 2.2 以降のデバイスでのみサポートされています。minSDK のバージョンを 2.2 に変更し、デバイスで試してください。それが動作します。

于 2012-04-26T04:31:33.397 に答える
0

必要な SDK の「google api」バージョンを使用していることを確認し、市場で有効な有効な google アカウントを持っている必要があります。これは c2dm の要件です。

于 2012-05-03T15:55:04.247 に答える