6

मैं पार्स के माध्यम से पुश नोटिफिकेशन भेजने और उत्पाद स्वादों को एकीकृत करने की कोशिश कर रहा हूं। जब मैं उत्पाद स्वाद लागू करता हूं, तो मैं पार्स पुश अधिसूचनाएं प्राप्त नहीं कर पा रहा हूं। किसी को भी इस मुद्दे को सही करने पर कोई सलाह हैएंड्रॉइड ग्रैडल उत्पाद पार्स पुश अधिसूचनाओं के साथ स्वाद

Gradle एप्लिकेशन फ़ाइल:

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 19 
buildToolsVersion "21.1.2" 

defaultConfig { 
    applicationId "com.example.project" 
     minSdkVersion 16 
     targetSdkVersion 21 

} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 
productFlavors{ 
    freeApp{ 
     applicationId "com.example.project.free" 

    } 
    premiumApp{ 
     applicationId "com.example.project.paid" 
    } 
} 
} 

dependencies { 
compile files('libs/android-async-http-1.4.2-66-g4b6eb97.jar') 
compile files('libs/android-support-v13.jar') 
compile files('libs/bolts-android-1.2.0.jar') 
compile files('libs/Parse-1.9.2.jar') 
compile files('libs/ParseCrashReporting-1.9.2.jar') 
} 

एंड्रॉयड प्रकट

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.project" 
android:versionCode="1" 
android:versionName="1.1" > 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<permission android:name="com.example.project.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.project.permission.C2D_MESSAGE" /> 

<application 
    android:name="com.example.project.Application" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 



    <activity 
     android:name="com.example.project.MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 



    <meta-data android:name="com.parse.push.notification_icon" android:resource="@drawable/ic_launcher"/> 

    <service android:name="com.parse.PushService" /> 
    <receiver android:name="com.parse.ParseBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.USER_PRESENT" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.parse.ParsePushBroadcastReceiver" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.parse.push.intent.RECEIVE" /> 
      <action android:name="com.parse.push.intent.DELETE" /> 
      <action android:name="com.parse.push.intent.OPEN" /> 
     </intent-filter> 
    </receiver> 
    <receiver android:name="com.parse.GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <!-- 
       IMPORTANT: Change "com.parse.starter" to match your app's package name. 
      --> 
      <category android:name="com.example.project" /> 
     </intent-filter> 
    </receiver> 
</application> 

+0

मैं सब कुछ कोशिश की है। मैं पार्स के साथ जीसीएम का उपयोग नहीं कर पाया। मैनिफेस्ट से सभी जीसीएम संबंधित सामानों को हटा दें और इसके बजाय अपने नेटवर्क का उपयोग करने के लिए पार्स फॉलबैक होगा। – Ammar

उत्तर

2

नोट: के रूप में देखा गया है, मेरे समाधान कुछ हद तक है नीचे मोर्टन होल्मगार्ड द्वारा एक से अधिक जटिल। कहने की जरूरत नहीं है, क्या मुझे सरल समाधान के बारे में पता था, मैंने इसे प्रस्तावित किया होगा। हालांकि, मेरे उत्तर में कुछ प्रासंगिक स्पष्टीकरण शामिल हैं और यह केवल एकमात्र था - और केवल सही - पांच सप्ताह के लिए उत्तर, इसलिए मैं इसे छोड़ दूंगा।

============================================== =============================

समस्या क्या है?

मुझे लगता है कि कारण आप किसी भी धक्का नहीं ले पा रहे है कि आप अपने AndroidManifest.xml में घोषित पार्स के लिए निम्नलिखित है:

<permission android:name="com.example.project.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.project.permission.C2D_MESSAGE" /> 

<receiver android:name="com.parse.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

     <!-- 
      IMPORTANT: Change "com.parse.starter" to match your app's package name. 
     --> 
     <category android:name="com.example.project" /> 
    </intent-filter> 
</receiver> 

पैकेज के नाम है, तथापि,

applicationId "com.example.project.free" 
के रूप में परिभाषित कर रहे हैं

और

applicationId "com.example.project.paid" 

तो पैकेज के नाम दिसम्बर से मेल नहीं खाते आपके AndroidManifest.xml में लारेशंस और इसलिए पार्स धक्का प्राप्त करने में असमर्थ है। दरअसल, यदि आप अपने लॉगक आउटपुट को देखते हैं, तो आपको पार्स से एक संदेश देखना चाहिए जो आपको बताता है कि आपके AndroidManifest.xml में क्या गुम है।

तो, इसे कैसे हल करें?

यह एक मुश्किल स्थिति का एक सा है, लेकिन यह किया जा सकता है:

1.) अपने main स्रोत सेट (src/main/AndroidManifest.xml) में दो भागों मैं AndroidManifest.xml से ऊपर उद्धृत निकालें। । paid स्रोत सेट के लिए

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> 
    <permission 
     android:name="com.example.project.free.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="com.example.project.free.permission.C2D_MESSAGE" /> 

    <application> 
     <receiver 
      android:name="com.parse.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="com.example.project.free" /> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 

2b) क्या एक ही:

2 ए) अपने free स्रोत सेट (src/free/AndroidManifest.xml में एक AndroidManifest.xml बनाएं) और निम्न दर्ज करें।। AndroidManifest.xml में पैकेज नाम को सही ढंग से प्रतिस्थापित करना सुनिश्चित करें।

यह क्यों काम करता है?

क्योंकि Gradle src/free/AndroidManifest.xml साथ src/main/AndroidManifest.xml को प्रतिस्थापित नहीं करता लेकिन इसके बजाय एक में विलीन हो जाती है उन्हें।इसलिए यदि आप main स्रोत सेट से घोषणाएं छोड़ दें और उन्हें free और paid पर डाल दें तो आपको प्रत्येक स्वाद के लिए एक सही ढंग से विलय AndroidManifest.xml मिलेगा।

+0

यह काम नहीं करेगा क्योंकि आर कक्षा प्रति पैकेज नाम (मैनिफेस्ट विशेषता) बनाई जाएगी। प्रति स्वाद के विभिन्न पैकेज नाम होने का मतलब है कि आप साझा कोड नहीं कर सकते हैं जो आर वर्ग तक पहुंचता है। – Ammar

+0

तो आप कह रहे हैं कि मैं 'applicationId' के माध्यम से अलग-अलग पैकेज नाम अलग-अलग पैकेज नाम नहीं दे सकता? क्योंकि मैं आपको आश्वस्त कर सकता हूं कि यह संभव है, और हमने कई बार ऐसा किया है। असल में, मैंने पार्स पश के लिए ऊपर वर्णित सटीक सेटअप का भी उपयोग किया है। –

+0

ओह रुको, आपने कहा _manifest attribute_ जिसे 'पैकेज नाम' कहा जाता है। उस स्थिति में: यह सच हो सकता है, अगर मैं उस विशेषता को बदल रहा था - लेकिन मैं नहीं हूं, मैं केवल एक नई अनुमति घोषित कर रहा हूं और उपयोग कर रहा हूं। –

8

मैं सिर्फ Manifest Merger साथ बहुत आसानी से ठीक उसी समस्या को हल कर दिया है:

${applicationId} 

उदाहरण:

<permission 
     android:name="${applicationId}.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 

    <application> 
     <receiver 
      android:name="com.parse.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

       <category android:name="${applicationId}" /> 
      </intent-filter> 
     </receiver> 
    </application> 
+0

हां, यह सही जवाब है। –

+1

जबकि मेरा उत्तर ऊपर भी है, * सही * है, मैं सहमत हूं कि यह * स्वीकृत * उत्तर होना चाहिए। –

+0

जब हम '$ {applicationId}' – Pankaj

संबंधित मुद्दे