Artikel eines Blogs von WordPress einfügen

  • Antworten:23
Tobias Pötzl
  • Forum-Beiträge: 12

15.04.2016, 19:40:59 via Website

Hey Leute, ich hab ein Problem.

Ich tüftel jetzt schon gut über 2 Tage damit rum, um die Beiträge auf meiner Website in meine App zu intigrieren.

Mein kompletter App aufbau ist auf Fragmenten.

Zuerst war meine idee, dass ich die Website, der Überkatigorie meines Blogs einfüge, aber mal Ganz ehrlich? Das sieht nicht gerade Professionel aus und Style hat es auch keinen!

Jetzt wollte ich mir anhand von ListItem jeden Artikel Einzeln abrufen und dann über eine Push Benachrichtigung preis geben, wenn ein neuer Artikel zum Lesen vorhanden ist.

Wie stelle ich das ganze an? Könnt ihr mir dabei Helfen?

Mfg

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.04.2016, 21:21:42 via Website

Hallo Tobias,
Herzlich wilkommen hier im Forum :)


Ich nehme an, eine einfache WebView und das darin anzeigen reicht dir nicht oder?

Wenn ja dann:

  1. Brauchst du eine API anbindung zur Webseite.
    Da du Wordpress nutzt, kannst du deren API Plugin verwenden.
    Zudem gibt es schon einige Javaklassen, welche die API wieder in Objekte kapseln und die Daten für dich bereithalten.
    Du musst diese dann nur irgendwie anzeigen können.
    http://stackoverflow.com/questions/12024811/how-to-retrieve-posts-from-a-wordpress-blog-in-an-android-app
    https://apppresser.com/using-wordpress-rest-api-mobile-app/

  2. Für Push Nachrichten musst du in deine App GCM implementieren. Das ist nciht weiter kompliziert, aber du brauchst auch zusätzlich auf dem Server eine Registrierung, also ein PHP sktipt, welches ein Gerät in der hinterlegten DB registiert, damit du nachher weisst an welche Geräte du die Nachricht schicken musst.

3.
Wenn du diese Registierungstabelle hast, musst du beim Veröffentlichen eines Artikels die Registrirungsdaten lesen und an jeden eine Nachricht schicken, dass ein neuer Artikel verfügbar ist.
Ob es für das ganze GCM zeugs in Wordpress uach schon Module gibt weiss ich nicht, dafür benutze ich das zu wenig..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

15.04.2016, 23:17:24 via Website

Hallo, vielen dank :)

Vielen Dank auch für die Fixe antwort!

Gibt es für GCM und für das Einkapseln, Bereit stellen und Aufrufen auch Examples um den Code richtig zu Verstehen?
Ich kann zwar sehr viel mit Java, aber wenn es dann um das Netzwerk geht, scheitert es bei mir, da ich dass nie Gebraucht habe.

Das Plugin, habe ich bereits in WordPress Installiert, dass das ich Verwende heißt WP REST API V2.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.04.2016, 23:30:38 via Website

Einlesen auf d.android.com
oder bei google suchen, git genug Tutorials, indenden die Java und auch PHP seite erklärt wird

— geändert am 15.04.2016, 23:30:47

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

16.04.2016, 11:26:17 via Website

So, ich hab das ganze jetzt soweit hin bekommen, allerdings zeigt er mir immer nur den Quellcode der Seite meines Artikels anstatt den Artikel selbst an (whew)

Ich hab im Layout ein TextView erstellt der dann den Text dann so Anzeigt:

<TextView
    android:id="@+id/artikel_tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""/>

Wo hab ich da einen Denk Fehler?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.04.2016, 11:29:10 via App

Der denkfehker ist, dass du den HTML Code aneigen willst.
Entweder du mschst beim setzen der HTML in die TextView Html.fromHtml(...) pder du nimmst statt der TextView eine Webview

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

16.04.2016, 11:43:27 via Website

So, eingefügt hat Funktioniert, allerdings zeigt er mir die Grafischen Sachen wie Bilder Icons und Emojn nicht an. Gibt es dafür auch noch etwas für das TextView, oder muss ich doch für das Ganze WebView benutzen?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.04.2016, 11:52:54 via App

Webview wäre erstmal am einfachsten.
Geht auch anders abder da brauchst du dann nen Extra Handler Thread zum bilder laden

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

16.04.2016, 14:46:31 via Website

Also mit WebView komm ich gerade irgendwie nicht Zurecht.
Ich versuch es als Fragment zu Schreiben, da bei mir alles Fragment ist.
Expamples finde ich leider auch nur als Activity und nicht als Fragment.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.04.2016, 15:25:55 via Website

Wie sieht das denn bei dir aus?

Du hast dein Fragment Leayout als XML, darauf diest du die WebView (anstatt TExtView)

Im Code im Fragment muss du dann nur die WebView finden und deine HTML reinladen:

WebView wv =(WebView)fragmentView.findViewById(R.id.webview);
wv.loadData("http://www.deinblog.de/",deinHTMLString,"text/html","utf-8");

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

16.04.2016, 18:13:13 via Website

Im Moment sieht BroadcastReceiver so aus:

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        if (progress != null) {
            progress.dismiss();
        }

        String response = intent.getStringExtra(RestTask.HTTP_RESPONSE);
        ourTextView.setText(Html.fromHtml(response));
        Log.i(TAG, "RESPONSE = " + response);

    }
};

Also als TextView.
Wenn ich es über Fragmente mache, dann sagt er mir immer fragmentView ist nicht Definiert oder String ist ein Int...
Also entweder ich hab momentan einen Großen Denk fehler, oder ich Verstehe die Materie von WebView nicht...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

16.04.2016, 18:21:25 via Website

Für was ist dein BroadcastReceiver?
Im Fragment brauchst du den doch nicht.

Hier mal ein beispiel Fragment:

public class TestFragment extends Fragment {


   private View fragmentView


@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
     fragmentView = inflater.inflate(R.layout.myFragmentLayout, container, false);

    final WebView wv = (WebView) fragmentView.findViewById(R.id.webview);

    //dann musst du dein Objekt oder String hier irgenwo laden z.b. aus dem Web oder aus dem Budle wo uv. vars übergeben wurden

    wv.loadData("http://deineseite.de",html,"text/html","utf-8");

    return fragmentView;

}

}

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

17.04.2016, 13:46:32 via Website

Naja, jetzt habe ich es zwar hinbekommen, allerdings zeigt er mir jetzt bei jeden Artikel abschnitt gleich die ganze Seite anstatt nur den Artikel...

Und wenn ich auf den Artikel klicke, dann öffnet er Chrome anstatt in der App zu bleiben...

— geändert am 17.04.2016, 13:52:19

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.04.2016, 13:47:56 via App

Dann hast du die falsche HTML zum anzeigen drin.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

06.05.2016, 16:40:05 via Website

Vielen dank!
Hat eine weile Gedauert, hatte zwischenzeitlich einiges zu tun.
Habe nun das mit den Artikeln alles hin bekommen, so wie ich es Möchte.

Jetzt geht es an das Push-Benachrichtigungs System.
Allerdings, finde ich dazu kein Tutorial dazu, wie man es am Besten einbaut im Fragmenten Format.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.05.2016, 17:27:11 via App

Push benachrichtigungen gibts nicht im Fragmentenformat.
Das musst du über die Google API und Services machen.
Das Intent hinter der Notification kann ja auf die FragmentActivity zeigen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

06.05.2016, 18:53:52 via Website

Ich gehe Strickt nach der Anleitung von Google im Developer

Allerdings bekomme ich beim Build.grandl immer diese Fehlermeldung beim Syncronisieren:
Error:(2, 0) Plugin with id 'com.google.gms.google-services' not found.

Das richtet sich auf dieses Plugin:
apply plugin: 'com.google.gms.google-services'

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.05.2016, 19:45:42 via App

Hast du das Plugin eingebundenEigentlich musst du es per compile('pluginName:PluginVersion')
einbinden

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

07.05.2016, 13:46:41 via Website

So hab ich es in der build.grandl:

apply plugin: 'com.google.gms.google-services'

classpath 'com.google.gms:google-services:2.0.0-alpha6'

dependencies {

 compile "com.google.android.gms:play-services-gcm:8.4.0"
}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.05.2016, 18:08:33 via App

Du brauchst nur die Dependency.
apply plugin und classpath nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

07.05.2016, 18:20:02 via Website

Ok danke!

Jetzt hab ich aber das Problem, dass er das Paket "gcm.play.android.samples.com.gcmquickstart" nicht findet.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.05.2016, 18:35:44 via App

Woher kommt der PackageName?
Wo verwendest du ihn?

Wenn du irgendwas aus Tutorials übernimmst misst du die Namen anpassen etc..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Tobias Pötzl
  • Forum-Beiträge: 12

07.05.2016, 21:10:28 via Website

Kann hier noch keinen Link posten, da ich noch als Neuling eingestuft bin.

Ich hab das ganze aus dem Android Developer genommen. Paket Daten alle angepasst, aber ich bin mir jetzt nicht sicher, ob ich in der Java Datei, auch das package zu meinem Ändern muss oder nicht, dachte eher dass es ein Eigens sein muss.

//Edit
OK, ich hab es jetzt zu meinem PackageName geändert. Ein paar Fehler kommen aber noch, das etweilige dinge nicht Definiert wären, obwohl sie Definiert sind.

— geändert am 07.05.2016, 21:37:33

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.05.2016, 22:17:07 via App

Dann fehlt bestimmt irgendwo ne Klammer oder ein Semikolon da sind solche Fehler typisch

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten