1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

C2DM APP Crash

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tau31535, 29.11.2011.

  1. tau31535, 29.11.2011 #1
    tau31535

    tau31535 Threadstarter Junior Mitglied

    Beiträge:
    39
    Erhaltene Danke:
    0
    Registriert seit:
    14.07.2009
    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(this0, 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 contextIntent intent) {
        if (
    intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
            
    Log.w("C2DM""Received registration ID");
            
    handleRegistration(contextintent);
        } else if (
    intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
            
    Log.w("C2DM""Received registration ID");
            
    //handleMessage(context, intent);
         
    }
     }

    private 
    void handleRegistration(Context contextIntent 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: 29.11.2011
  2. HerrHofrat, 30.11.2011 #2
    HerrHofrat

    HerrHofrat Android-Hilfe.de Mitglied

    Beiträge:
    48
    Erhaltene Danke:
    5
    Registriert seit:
    09.01.2010
    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
     

Diese Seite empfehlen