C2DM APP Crash

T

tau31535

Neues Mitglied
0
Hallo,

da bin ich mal wieder :)
Ich habe gestern versucht meine APP C2DM tauglich zu machen.
Jedoch stürtzt Sie ab.

Meine Manifest:

PHP:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.BTCar2"
      android:versionCode="1"
      android:versionName="1.0">
   <permission android:name="com.BTCar2.permission.C2D_MESSAGE" android:protectionLevel="signature" />
   <uses-permission android:name="com.BTCar2.permission.C2D_MESSAGE" />

   <!-- This app has permission to register and receive message -->
   <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
   <uses-permission android:name="android.permission.INTERNET" />
      
      
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.CAMERA" />
 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />
 <uses-permission android:name="android.permission.FLASHLIGHT" />
 


    <application android:icon="@drawable/icon" android:label="@string/app_name">
    
            <activity android:name=".BTCar2"
                  android:label="@string/app_name"
                  android:windowSoftInputMode="stateHidden"
                  android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".C2DMReceiver" />
        <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
              <intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.BTCar2" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.BTCar2" />
</intent-filter>
</receiver>

    </application>
</manifest>
Registration mit einem Button verbunden

PHP:
public void c2dmreg() {
    
    Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
    registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate
    registrationIntent.putExtra("sender", "Meine Emailadresse");
    startService(registrationIntent);
    
    Log.e(TAG, "c2dmreg");
und dann habe ich noch das bei mir drinne stehen
PHP:
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
        Log.w("C2DM", "Received registration ID");
        handleRegistration(context, intent);
    } else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
        Log.w("C2DM", "Received registration ID");
        //handleMessage(context, intent);
     }
 }

private void handleRegistration(Context context, Intent intent) {
    String registration = intent.getStringExtra("registration_id"); 
    if (intent.getStringExtra("error") != null) {
        Log.w("C2DM", "error");
    } else if (intent.getStringExtra("unregistered") != null) {
        // unregistration done, new messages from the authorized sender will be rejected
    } else if (registration != null) {
        Log.w("C2DM", "ok");
       // Send the registration ID to the 3rd party site that is sending the messages.
       // This should be done in a separate thread.
       // When done, remember that all registration is done. 
    }
}
1. Muss ich in App & Sender was eintragen?
2. welche E-Mailadresse gehört in das Feld Meine Emailadresse
3. handleMessage(context, intent); was soll ich damit machen?

4. Meine App Crashed beim aufrufen von public void c2dmreg()

5. Axo mein package com.BTCar2 habe ich auf http://code.google.com/android/c2dm/signup.html regestriert und habe eine Bestätigung bekommen. Kann ich eigentlich irgendwo einsehen welche package C2DM regestriert sind z.B. von mir?


Ich hoffe ihr könnt mir helfen:razz:
 
Zuletzt bearbeitet:
Hallo!

Als Sender Intent musst du deine E-Mail Adresse angeben, mit der du dein Package beim C2DM registriert hast. Das Feld heißt "Role (sender) account email". Das heißt nichts anderes, als das du nur von dem Google Konto C2DM Messages zu deinem App schicken darfst.

Zu deinem Manifest: Du Musst deine Receiver Activity nicht als Service definieren, sondern als Receiver! Ich hab meine noch dazu vom BroadcastReceiver abgeleitet.

Code:
[COLOR=#000000]
<receiver android:name=".C2DMReceiver" 
          android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.BTCar2" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.BTCar2" />
    </intent-filter>
</receiver>[/COLOR]

Probier mal das Manifest so umzuschreiben. Ich denke das dein App deswegen abstürzt. Weiters musst du dir noch ein Handling überlegen, um die RegistrationID auf deinen Server zu bekommen. Ich hab mir dazu ein php File erstellt, dem die RegistrationID per HTTP Post übergeben wird, und diese insertiert mir dann die ID in meine Backend Datenbank.


Am Besten du schaust dir mal dieses Tutorial an. Im handleMessage(context, intent); musst du einfach nur aus dem intent deinen Payload String auslesen und dann wie gewünscht ausgeben.


LG
 

Ähnliche Themen

R
  • Robby1950
2
Antworten
23
Aufrufe
954
Robby1950
R
netfreak
  • netfreak
Antworten
10
Aufrufe
438
netfreak
netfreak
R
  • raller
Antworten
15
Aufrufe
505
DOT2010
DOT2010
Zurück
Oben Unten