Cập nhật: GCM không dùng nữa, hãy sử dụng FCM
Làm cách nào tôi có thể tích hợp Google Cloud Messaging mới trong phụ trợ PHP?
php android firebase-cloud-messaging google-cloud-messaging
— user1488243
nguồn
I”ve written a small OOP-library with an implementation of GCM-server. Hope it will help someone 🙂 Check it on GitHub – github.com/CodeMonkeysRu/GCMMessage
HelmiB: I tried your code on website, it executes without any error, but the $result is empty. Also the message won”t deliver. Please help me. I”m in a really need of it.
Cái ngã ba GCMMessage của tôi hỗ trợ sao lưu theo cấp số nhân, điều bắt buộc để sử dụng API của Google. Nó sử dụng máy chủ redis để xếp hàng tin nhắn và hỗ trợ điểm cuối mới cũng như iOS: github.com/stevetauber/php-gcm-queue
Rất đơn giản, tất cả những gì bạn cần chỉ là một máy chủ ứng dụng, máy chủ GCM và một ứng dụng lưu trữ dịch vụ đó. Tham khảo ví dụ này. Tại đây localhost hoạt động như máy chủ ứng dụng feelzdroid.com/2016/02/ Khăn
Mã này sẽ gửi một thông điệp GCM đến nhiều ID đăng ký thông qua PHP CURL.
// Payload data you want to send to Android device(s) // (it will be accessible via intent extras) $data = array(“message” => “Hello World!”); // The recipient registration tokens for this notification // https://developer.android.com/google/gcm/ $ids = array(“abc”, “def”); // Send push notification via Google Cloud Messaging sendPushNotification($data, $ids); function sendPushNotification($data, $ids) // Close curl handle curl_close($ch); // Debug GCM response echo $result; }
— Elad Nava
nguồn
Nó gần như hoạt động ở đây, nhưng tôi không nhận được bất kỳ tin nhắn nào trên điện thoại. Tôi muốn gỡ lỗi nó, nhưng tôi không biết tại sao kết quả $ của tôi luôn trống rỗng …
Cảm ơn câu trả lời này! Tôi đã đưa nó vào một khung công tác đối tượng PHP nếu điều này hữu ích với bất kỳ ai: github.com/kaiesh/GCM_PHP
Sit Vô hiệu hóa kiểm tra chứng chỉ SSL LUÔN LUÔN là một ý tưởng tồi. Nếu máy chủ của bạn không thể xác minh chứng chỉ SSL, hãy sử dụng kỹ thuật này để báo cho cURL biết chứng chỉ nào sẽ được yêu cầu: unitstep.net/blog/2009/05/05/ hoặc sử dụng cURL để sử dụng cacert.pem mới nhất từ trang web của cURL đại loại như thế này: gist.github.com/gboudreau/5206966
php // Replace with the real server API key from Google APIs $apiKey = “your api key”; // Replace with the real client registration IDs $registrationIDs = array( “reg id1”,“reg id2”); // Message to be sent $message = “hi Shailesh”; // Set POST variables $url = “https://android.googleapis.com/gcm/send”; $fields = array( “registration_ids” => $registrationIDs, “data” => array( “message” => $message ), ); $headers = array( “Authorization: key=” .
Bạn đang xem: Gcm là gì
$apiKey, “Content-Type: application/json” ); // Open connection $ch = curl_init(); // Set the URL, number of POST vars, POST data curl_setopt( $ch, CURLOPT_URL, $url); curl_setopt( $ch, CURLOPT_POST, true); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true); //curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields)); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // curl_setopt($ch, CURLOPT_POST, true); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode( $fields)); // Execute post $result = curl_exec($ch); // Close connection curl_close($ch); echo $result; //print_r($result); //var_dump($result); ?>
— Shailesh Giri
nguồn
3
Xin chào Shailesh Giri, nó hoạt động tốt bằng cách sử dụng khóa Trình duyệt , nhưng trong trường hợp khóa Máy chủ, nó hiển thị Lỗi trái phép 401 . Bạn co thể giup tôi được không.
— Sushil Kandola
kết quả mong đợi từ máy chủ là gì? Tôi không nhận được bất kỳ phản hồi! thiết bị cũng không hiển thị bất kỳ tin nhắn.
— shiladitya
3
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);là một không lớn không có. Nếu, vì một số lý do, máy chủ của bạn chạy mã PHP này không thể xác minh chứng chỉ SSL được sử dụng bởi các máy chủ của Google, bạn có thể cho cURL biết phải xác minh điều gì. Ví dụ: unitstep.net/blog/2009/05/05/…
— Guillaume Boudreau
18
Thật dễ dàng để làm. Các cURL mã đó là trên trang Elad Nava đã đặt ở đây hoạt động. Elad đã bình luận về lỗi này mà anh ta nhận được.
Chuỗi mô tả một lỗi xảy ra trong khi xử lý thông báo cho người nhận đó. Các giá trị có thể giống như được ghi trong bảng trên, cộng với “Không khả dụng” (có nghĩa là máy chủ GCM đang bận và không thể xử lý tin nhắn cho người nhận cụ thể đó, vì vậy nó có thể được thử lại).
Tôi đã có một dịch vụ được thiết lập dường như đang hoạt động (ish) và cho đến nay tất cả những gì tôi đã trả lại đều không có lợi nhuận từ Google. Nhiều khả năng điều này sẽ thay đổi sớm.
Để trả lời câu hỏi, hãy sử dụng PHP, đảm bảo Zend Framework nằm trong đường dẫn bao gồm của bạn và sử dụng mã này:
php ini_set(“display_errors”,1); include“Zend/Loader/Autoloader.php”; Zend_Loader_Autoloader::getInstance(); $url = “https://android.googleapis.com/gcm/send”; $serverApiKey = “YOUR API KEY AS GENERATED IN API CONSOLE”; $reg = “DEVICE REGISTRATION ID”; $data = array( “registration_ids” => array($reg), “data” => array(“yourname” => “Joe Bloggs”) ); print(json_encode($data)); $client = new Zend_Http_Client($url); $client->setMethod(“POST”); $client->setHeaders(array(“Content-Type” => “application/json”, “Authorization” => “key=” . $serverApiKey)); $client->setRawData(json_encode($data)); $request = $client->request(“POST”); $body = $request->getBody(); $headers = $request->getHeaders(); print(“
Và chúng tôi đã có nó. Một ví dụ hoạt động (nó sẽ hoạt động sớm) về việc sử dụng GCM mới của GCM trong Zend Framework PHP.
— Roger Thomas
nguồn
9
CẬP NHẬT MASSIVE! Rõ ràng việc sử dụng Khóa API được thiết lập với Hạn chế IP không hoạt động. Tôi vừa trao đổi Khóa API của mình ở phía Máy chủ để sử dụng Khóa trong Bảng điều khiển API có tên “Khóa cho ứng dụng trình duyệt (có người giới thiệu)” Và đoán xem! Nó đã đi qua. Đây là những gì tôi đã trả về:
— Roger Thomas
1
Nó bật và tắt ngay bây giờ. Tôi đã có khoảng 3500 tin nhắn mỗi ngày đi qua nó và cho đến nay không có vấn đề gì để báo cáo.
— Roger Thomas
+1 Elad .. bạn phải sử dụng khóa API ứng dụng BROWSER cho các ứng dụng SERVER! Cảm ơn Google, FAIL thực sự hữu ích ở đó 🙁 (lãng phí nhiều giờ)
— Jonny Nott
13
Sau khi tìm kiếm trong một thời gian dài cuối cùng tôi cũng có thể tìm ra chính xác những gì tôi cần, Kết nối với GCM bằng ngôn ngữ kịch bản phía máy chủ, Hướng dẫn sau đây sẽ cho chúng tôi ý tưởng rõ ràng về cách thiết lập mọi thứ chúng tôi cần để bắt đầu với GCM
Thông báo đẩy Android bằng Google Cloud Messaging (GCM), PHP và MySQL
— Yoga Sai Krishna
nguồn
10
Bây giờ tôi thực sự có công việc này trong một nhánh trong cây Zend_Mobile của mình: https://github.com/mwillbanks/Zend_Mobile/tree/feature/gcm
Điều này sẽ được phát hành với ZF 1.12, tuy nhiên, nó sẽ cung cấp cho bạn một số ví dụ tuyệt vời về cách thực hiện việc này.
Đây là một bản demo nhanh về cách nó sẽ hoạt động ….
php require_once “Zend/Mobile/Push/Gcm.php”; require_once “Zend/Mobile/Push/Message/Gcm.php”; $message = new Zend_Mobile_Push_Message_Gcm(); $message->setId(time()); $message->addToken(“ABCDEF0123456789”); $message->setData(array( “foo” => “bar”, “bar” => “foo”, )); $gcm = new Zend_Mobile_Push_Gcm(); $gcm->setApiKey(“MYAPIKEY”); $response = false; try catch (Zend_Mobile_Push_Exception $e) // handle all errors and registration_id”s foreach ($response->getResults() as $k => $v) if ($v“error”>) if ($v“message_id”>) }
— mwillbanks
nguồn
1
Đồng ý! Điều này là tốt nhưng làm thế nào tôi có thể nhận được mã thông báo của người dùng. Tôi đoán bạn đang sử dụng mã thông báo làm đăng ký. Trong ứng dụng Android của tôi, URL máy chủ sẽ là gì?
— tasomaniac
Có mã thông báo là id đăng ký; điều này đặc biệt bởi vì thư viện cố gắng duy trì một chút trừu tượng vì nó cũng thực hiện APNS và MPNS. URL máy chủ là bất cứ điều gì bạn kết thúc; điều này chỉ đơn giản là cung cấp keo để gửi, bạn sẽ cần phải viết một khu vực nơi bạn sẽ đăng id đăng ký và lưu nó ở đâu đó. Từ đó bạn có thể sử dụng mã trên để thực sự gửi thông báo đẩy tới ứng dụng.
— mwillbanks
6
Rất nhiều hướng dẫn đã lỗi thời và thậm chí mã hiện tại không tính đến khi đăng ký thiết bị được cập nhật hoặc thiết bị không đăng ký. Nếu các mục đó không được kiểm tra, cuối cùng nó sẽ gây ra sự cố ngăn không nhận được tin nhắn. http://forum.loungekatt.com/viewtopic.php?t=63#p181
— Giỏ hàng bị bỏ rơi
nguồn
6
Ngoài ra, bạn có thể thử đoạn mã này, nguồn :
php define(“GOOGLE_API_KEY”, “AIzaSyCJiVkatisdQ44rEM353PFGbia29mBVscA”); define(“GOOGLE_GCM_URL”, “https://android.googleapis.com/gcm/send”); function send_gcm_notify($reg_id, $message) curl_close($ch); echo $result; } $reg_id = “APA91bHuSGES…..nn5pWrrSz0dV63pg”; $msg = “Google Cloud Messaging working well”; send_gcm_notify($reg_id, $msg);
— dexxtr
nguồn
Mã của bạn hiển thị lỗi “Đã xảy ra sự cố: Không thể kết nối với 74.125.142.95: Quyền bị từ chối”. Vấn đề là gì?
— user2064667
4
php function sendMessageToPhone($deviceToken, $collapseKey, $messageText, $yourKey) if ($httpCode != 200) curl_close($ch); return $response; } $yourKey = “YOURKEY”; $deviceToken = “REGISTERED_ID”; $collapseKey = “COLLAPSE_KEY”; $messageText = “MESSAGE”; echo sendMessageToPhone($deviceToken, $collapseKey, $messageText, $yourKey); ?>
Trong kịch bản trên chỉ cần thay đổi:
“YourKEY” để khóa API thành Khóa máy chủ của bảng điều khiển API.
“REGISTERED_ID” với ID đăng ký thiết bị của bạn
“COLLAPSE_KEY” với khóa mà bạn yêu cầu
“TIN NHẮN” với thông báo mà bạn muốn gửi
Hãy cho tôi biết nếu bạn gặp bất kỳ vấn đề nào trong việc này, tôi có thể nhận thông báo thành công bằng cách sử dụng cùng một tập lệnh.
— Ajit
nguồn
2
Bạn có thể sử dụng thư viện PHP này có sẵn trên packagist:
https://github.com/CoreProc/gcm-php
Sau khi cài đặt, bạn có thể làm điều này:
$gcmClient = new GcmClient(“your-gcm-api-key-here”); $message = new Message($gcmClient); $message->addRegistrationId(“xxxxxxxxxx”); $message->setData( “title” => “Sample Push Notification”, “message” => “This is a test push notification using Google Cloud Messaging” >); try catch (Exception $exception)
— chrisbjr
nguồn
0
Đây là một thư viện tôi rẽ nhánh từ CodeMonkeysRU.
Lý do tôi rẽ nhánh là vì Google yêu cầu dự phòng theo cấp số nhân. Tôi sử dụng máy chủ redis để xếp hàng tin nhắn và gửi lại sau một thời gian đã đặt.
Tôi cũng đã cập nhật nó để hỗ trợ iOS.
Xem thêm: Repercussion Là Gì – Giải Thích Nghĩa, Ví Dụ Hay &Raquo Tiếng Anh 24H
https://github.com/stevetauber/php-gcm-queue
— Steve Tauber
nguồn
Xin chào, bạn có thể vui lòng chỉ cho tôi các thay đổi được thực hiện cho iOS không, tôi thực sự không thấy gì đặc biệt so với thư viện gốc.
— fralbo
2ndGAB lý do chính khiến tôi rẽ nhánh là sự thụt lùi theo cấp số nhân. Đối với các thay đổi của iOS, bạn có thể đọc về chúng tại đây: developers.google.com/cloud-messaging/,
— Steve Tauber
0
Đây là mã android cho mã PHP ở trên được đăng bởi
Elad Nava
MainActivity.java (Hoạt động của Trình khởi chạy)
public class MainActivity extends AppCompatActivity
Override public void onFailure(String ex) }); } }
GCMClientManager.java
public class GCMClientManager /** *
return Application”s version code from the . */ private static int getAppVersion(Context context) catch (NameNotFoundException e) } // Register if needed or fetch from local store public void registerIfNeeded(final RegistrationCompletedHandler handler) else } else } /** * Registers the application with GCM servers asynchronously. *
* Stores the registration ID and app versionCode in the application”s * shared preferences. */
private void registerInBackground(final RegistrationCompletedHandler handler) InstanceID instanceID = InstanceID.getInstance(getContext()); regid = instanceID.getToken(projectNumber, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); Log.i(TAG, regid); // Persist the regID – no need to register again. storeRegistrationId(getContext(), regid); } catch (IOException ex) return regid; }
Override protected void onPostExecute(String regId) } }.execute(null, null, null); } /** * Gets the current registration ID for application on GCM service. *
* If result is empty, the app needs to register. * *
return registration ID, or empty string if there is no existing * registration ID. */
private String getRegistrationId(Context context) // Check if app was updated; if so, it must clear the registration ID // since the existing regID is not guaranteed to work with the new // app version. int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); int currentVersion = getAppVersion(context); if (registeredVersion != currentVersion) return registrationId; } /** * Stores the registration ID and app versionCode in the application”s * . * *
param context application”s context. *
param regId registration ID */ private void storeRegistrationId(Context context, String regId) private SharedPreferences getGCMPreferences(Context context) /** * Check the device to make sure it has the Google Play Services APK. If * it doesn”t, display a dialog that allows users to download the APK from * the Google Play Store or enable it in the device”s system settings. */ private boolean checkPlayServices() else return false; } return true; } private Context getContext() private Activity getActivity() public static abstract class RegistrationCompletedHandler } }
PushNotificationService.java (Trình tạo thông báo)
public class PushNotificationService extends GcmListenerService private void sendNotification(String title, String body) }
AndroidManifest.xml
xml version=“1.0” encoding=“utf-8”?>
mipmap/ic_launcher” android:label=“
string/app_name” android:supportsRtl=“true” android:theme=“
style/AppTheme” >
— Akshay Paliwal
nguồn
0
dùng cái này
function pnstest()else //header with content_type api key $headers = array( “Content-Type:application/json”, “Authorization:key=”.
Xem thêm: Bộ Nông Nghiệp Và Phát Triển Nông Thôn Tiếng Anh Là Gì, Tên Tiếng Anh Của Các Bộ, Cơ Quan Ngang
$server_key ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if ($result === FALSE) curl_close($ch); return $result; }
— Rajkumar Kumaw
nguồn
0
Tôi biết đây là Câu trả lời muộn, nhưng nó có thể hữu ích cho những ai muốn phát triển các ứng dụng tương tự với định dạng FCM hiện tại (GCM đã không được chấp nhận).
Mã PHP sau đây đã được sử dụng để gửi podcast theo chủ đề. Tất cả các ứng dụng đã đăng ký với kênh / topis được đề cập sẽ nhận được Thông báo đẩy này.
php tryelse curl_close($ch); return $result; } catch(Exception $e) ?>
— Jack
nguồn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Chuyên mục: Hỏi Đáp