मैंने ऐप बनाया है जो पुश नोटिफिकेशन भेजता है। सब कुछ अच्छा काम कर रहा है। अगर ऐप चल रहा है या बंद नहीं हुआ है तो यह मुझे सीधे दूसरे पेज पर ले जाता है। लेकिन समस्या यह है कि मेरा ऐप चलाने के बाद अगर मैं अपना ऐप पृष्ठभूमि में रखता हूं या इसे बंद करता हूं और फिर अधिसूचना भेजता हूं। अधिसूचना पर क्लिक करने के बाद यह मुझे दूसरे पृष्ठ के बजाय मुख्य पृष्ठ पर ले जाता है। मैं चाहता हूं कि यह मुझे दूसरे पृष्ठ पर ले जाए, भले ही ऐप बंद हो या पृष्ठभूमि में हो। नीचे मेरा कोड है:

MainActivity.java

public class MainActivity extends Activity {

    private static final String TAG="MainActivity";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button BtnshowToken=(Button)findViewById(R.id.buttonshowtoken);
        BtnshowToken.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String token= FirebaseInstanceId.getInstance().getToken();
                Log.d(TAG,"Token: "+token);
                Toast.makeText(MainActivity.this,token,Toast.LENGTH_SHORT).show();

            }
        });
    }


}

MyFirebaseInstanceIDService.java

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG="MyFirebaseInsIDService";

    @Override
    public void onTokenRefresh() {

        //get updated token
        String refreshedToken= FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG,"New Token: "+refreshedToken);



    }
}


MyFirebaseMessagingService.java
public class MyFirebaseMessagingService extends FirebaseMessagingService{
    private static final String TAG="MyFirebaseMsgService";


    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
       Log.d(TAG, "FROM:" +remoteMessage.getFrom());

        //Check if msg contains data
        if(remoteMessage.getData().size() > 0){
            Log.d(TAG, "Message data: "+remoteMessage.getData());
        }


        //Check if msg contains notification
        if(remoteMessage.getNotification()!=null){
            Log.d(TAG,"Message body: "+remoteMessage.getNotification().getBody());
            sendNotification(remoteMessage.getNotification().getBody());
        }
    }

        //Display notification
private void  sendNotification(String body){

    Intent intent=new Intent(this,SecondActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingIntent=PendingIntent.getActivity(this, 0/*Request code*/, intent, PendingIntent.FLAG_ONE_SHOT);
    //Set sound of notification
    Uri notificationsound= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder notifiBuilder=new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Firebase Cloud Messaging")
            .setContentText(body)
            .setAutoCancel(true)
            .setSound(notificationsound)
            .setContentIntent(pendingIntent);


    NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0/*Id of notification*/,notifiBuilder.build());



    }
}


SecondActivity.java
public class SecondActivity extends Activity {

     TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);


    }
}


activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">





    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:id="@+id/imageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="151dp"
        android:src="@drawable/firebase"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Token"
        android:id="@+id/buttonshowtoken"
        android:layout_below="@+id/imageView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="49dp" />
</RelativeLayout>


second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">


<TextView
    android:id="@+id/tv2"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:text="Second Activity"
    android:textColor="#000"
    android:gravity="center"
    android:textSize="30dp"/>

    <ImageView
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/image"
        android:src="@drawable/welcome"
        />

</LinearLayout>


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.abc.firebasenoteg" >


    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


        <activity
            android:name=".SecondActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="YourActivity" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

        </activity>

        <service
            android:name=".MyFirebaseMessagingService"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />


            </intent-filter>
        </service>

        <service
            android:name=".MyFirebaseInstanceIDService"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />


            </intent-filter>
        </service>



    </application>

</manifest>


google-services.json
{

  "project_info": {
    "project_number": "785125209715",
    "firebase_url": "https://fir-notification-a5fce.firebaseio.com",
    "project_id": "fir-notification-a5fce",
    "storage_bucket": "fir-notification-a5fce.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:785125209715:android:676ef33a2e673fd3",
        "android_client_info": {
          "package_name": "com.example.abc.firebasenoteg"
        }
      },
      "oauth_client": [
        {
          "client_id": "785125209715-496loih2csg0egp7h9hphtiaui49coeb.apps.googleusercontent.com",
          "client_type": 3
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyCdvlwxewCNStJwTwcqq3CGBGZ08j9MVdU"
        }
      ],
      "services": {
        "analytics_service": {
          "status": 1
        },
        "appinvite_service": {
          "status": 1,
          "other_platform_oauth_client": []
        },
        "ads_service": {
          "status": 2
        }
      }



    }
  ],


  "configuration_version": "1",



}
0
Ajinkya 24 फरवरी 2017, 15:49

2 जवाब

आपको सर्वर अनुरोध से क्लिकलिस्टर की आवश्यकता है और अपनी गतिविधि के अंदर अपने प्रकट इरादे-क्रिया में श्रोता का नाम जोड़ना होगा।

"notification" : {
"body" : "Body",
"title" : "Titme",
"icon" : "YourIcon"
"click_action" : "<<yourkey e.g. MainActivity>>"
}

<activity
     android:name=".MainActivity">
     <intent-filter>
        <action android:name="<<yourkey e.g. MainActivity>>" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

यह तब के लिए है जब आपका ऐप अग्रभूमि में उपलब्ध नहीं है। आशा है कि यह मददगार है, धन्यवाद

4
Jd Prajapati 24 फरवरी 2017, 15:52
जब मैं अपना ऐप बंद करता हूं तो यह काम नहीं कर रहा है। अगर ऐप चल रहा है तो मैं सीधे दूसरे पेज पर जा सकता हूं। लेकिन अगर मैं अपना ऐप बंद करता हूं और फिर नोटिफिकेशन पर क्लिक करता हूं तो यह मेनपेज दूसरा पेज नहीं खुलता है
 – 
Ajinkya
24 फरवरी 2017, 16:01
अधिसूचना जेसन जिसे आपने अपने सर्वर पक्ष में सेट किया है, आप पुश अधिसूचना का परीक्षण कैसे कर सकते हैं?
 – 
Jd Prajapati
24 फरवरी 2017, 16:04
मैंने सर्वर साइड पर कुछ भी सेट नहीं किया है। क्या आप मुझे संक्षेप में बता सकते हैं कि आप वास्तव में क्या कह रहे हैं।
 – 
Ajinkya
24 फरवरी 2017, 16:07
यह बहुत आसान है कि आपको अपने सर्वर पक्ष में पुश अनुरोध सेट करने की आवश्यकता है, क्लिक_एक्शन भी सेट करें। इस पोस्ट का अनुसरण करें: stackoverflow.com/a/37531595/2176952
 – 
Jd Prajapati
24 फरवरी 2017, 16:15
मैंने उस google-services फ़ाइल को जोड़ा है जिस पर आप विचार कर रहे हैं। क्या आप यह मांग रहे थे?
 – 
Ajinkya
24 फरवरी 2017, 16:30

अगर ऐप बैकग्राउंड में है और आप नोटिफिकेशन पर क्लिक करते हैं, तो डेटा इंटेंट के एक्स्ट्रा में स्टोर हो जाता है। तो आपको फायरबेस अनुरोध में action_code जैसा कुछ चाहिए। यह उदाहरण है:

फायरबेस अनुरोध:

{
  "to": "/topics/order",
  "priority": "high",
  "notification": {
    "title": "Hello admin",
    "body":"There's new order :)",
    "sound":"default"
  },
  "data": {
    "msgCode":"newOrder"
  }
}

MainActivity.java

Intent intent = getIntent();
if (intent.hasExtra("msgCode")) {
    String msgCode = intent.getStringExtra("msgCode");
    if (msgCode.equals("newOrder")) {
        Toast.makeText(this, "newOrder", Toast.LENGTH_SHORT).show();
        Log.i("zihad", "newOrder");
        startActivity(new Intent(this, ListOrderActivity.class));
        intent.removeExtra("msgCode");
    }
}
0
zihadrizkyef 24 फरवरी 2017, 16:09
वह फायरबेस अनुरोध भाग कहाँ लागू किया गया और कैसे?
 – 
Ajinkya
24 फरवरी 2017, 22:33
आपने अपने फायरबेस से अधिसूचना को कैसे आगे बढ़ाया?
 – 
zihadrizkyef
25 फरवरी 2017, 14:48
मैंने नोटिफिकेशन और फिर नए मैसेज पर क्लिक किया और फिर सेंड मैसेज, सिलेक्टेड ऐप यानी मेरे पैकेज का नाम पर क्लिक किया और फिर सेंड मैसेज पर क्लिक किया।
 – 
Ajinkya
27 फरवरी 2017, 13:30
"सूचना" : { "बॉडी" : "बॉडी", "शीर्षक" : "टाइटमे", "आइकन" : "YourIcon" "क्लिक_एक्शन" : "<>" } इस भाग को कहां लिखना है?
 – 
Ajinkya
1 मार्च 2017, 13:20
तो आपको फायरबेस के एपीआई से नोटिफ़ को पुश करना है.. तो यह इस जैसा होगा
 – 
zihadrizkyef
2 मार्च 2017, 03:51